openSUSE Commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
June 2024
- 2 participants
- 1220 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package cppreference-doc for openSUSE:Factory checked in at 2024-06-27 16:04:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cppreference-doc (Old)
and /work/SRC/openSUSE:Factory/.cppreference-doc.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cppreference-doc"
Thu Jun 27 16:04:36 2024 rev:10 rq:1183537 version:20240610
Changes:
--------
--- /work/SRC/openSUSE:Factory/cppreference-doc/cppreference-doc.changes 2023-08-30 10:22:35.040646869 +0200
+++ /work/SRC/openSUSE:Factory/.cppreference-doc.new.18349/cppreference-doc.changes 2024-06-27 16:05:13.206838676 +0200
@@ -1,0 +2,6 @@
+Tue Jun 18 17:03:50 UTC 2024 - Atri Bhattacharya <badshah400(a)gmail.com>
+
+- Update to version 20240610:
+ * Update content from the website, long overdue.
+
+-------------------------------------------------------------------
Old:
----
cppreference-doc-20230810.tar.xz
New:
----
cppreference-doc-20240610.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cppreference-doc.spec ++++++
--- /var/tmp/diff_new_pack.IXh900/_old 2024-06-27 16:05:13.686856301 +0200
+++ /var/tmp/diff_new_pack.IXh900/_new 2024-06-27 16:05:13.690856447 +0200
@@ -1,7 +1,7 @@
#
# spec file for package cppreference-doc
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: cppreference-doc
-Version: 20230810
+Version: 20240610
Release: 0
Summary: Cppreference documentation for offline reading
License: CC-BY-SA-3.0
++++++ cppreference-doc-20230810.tar.xz -> cppreference-doc-20240610.tar.xz ++++++
/work/SRC/openSUSE:Factory/cppreference-doc/cppreference-doc-20230810.tar.xz /work/SRC/openSUSE:Factory/.cppreference-doc.new.18349/cppreference-doc-20240610.tar.xz differ: char 25, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-azure-mgmt-scvmm for openSUSE:Factory checked in at 2024-06-27 16:04:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-azure-mgmt-scvmm (Old)
and /work/SRC/openSUSE:Factory/.python-azure-mgmt-scvmm.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-azure-mgmt-scvmm"
Thu Jun 27 16:04:31 2024 rev:4 rq:1183531 version:1.0.0.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-azure-mgmt-scvmm/python-azure-mgmt-scvmm.changes 2024-04-07 22:11:24.042456298 +0200
+++ /work/SRC/openSUSE:Factory/.python-azure-mgmt-scvmm.new.18349/python-azure-mgmt-scvmm.changes 2024-06-27 16:05:10.986757165 +0200
@@ -1,0 +2,13 @@
+Wed Jun 26 09:38:31 UTC 2024 - John Paul Adrian Glaubitz <adrian.glaubitz(a)suse.com>
+
+- New upstream release
+ + Version 1.0.0
+ + For detailed information about changes see the
+ CHANGELOG.md file provided with this package
+- Override upstream version with 1.0.0.0 to ensure
+ proper upgrade from previous version 1.0.0b2
+- Remove unzip package from BuildRequires
+- Switch source archive format to TAR.GZ
+- Update Requires from setup.py
+
+-------------------------------------------------------------------
Old:
----
azure-mgmt-scvmm-1.0.0b2.zip
New:
----
azure-mgmt-scvmm-1.0.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-azure-mgmt-scvmm.spec ++++++
--- /var/tmp/diff_new_pack.d1mFjn/_old 2024-06-27 16:05:11.458774495 +0200
+++ /var/tmp/diff_new_pack.d1mFjn/_new 2024-06-27 16:05:11.458774495 +0200
@@ -16,15 +16,17 @@
#
+%define realversion 1.0.0
+
%{?sle15_python_module_pythons}
Name: python-azure-mgmt-scvmm
-Version: 1.0.0b2
+Version: 1.0.0.0
Release: 0
Summary: Microsoft Azure Scvmm Management Client Library for Python
License: MIT
Group: Development/Languages/Python
URL: https://github.com/Azure/azure-sdk-for-python
-Source: https://files.pythonhosted.org/packages/source/a/azure-mgmt-scvmm/azure-mgm…
+Source: https://files.pythonhosted.org/packages/source/a/azure-mgmt-scvmm/azure-mgm…
Source1: LICENSE.txt
BuildRequires: %{python_module azure-mgmt-nspkg >= 3.0.0}
BuildRequires: %{python_module azure-nspkg >= 3.0.0}
@@ -33,13 +35,11 @@
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
-BuildRequires: unzip
Requires: python-azure-mgmt-nspkg >= 3.0.0
Requires: python-azure-nspkg >= 3.0.0
-Requires: python-msrest >= 0.7.1
Requires: (python-azure-common >= 1.1 with python-azure-common < 2.0.0)
Requires: (python-azure-mgmt-core >= 1.3.2 with python-azure-mgmt-core < 2.0.0)
-Requires: (python-typing_extensions >= 4.3.0 if python-base < 3.8)
+Requires: (python-isodate >= 0.6.1 if python-isodate < 1.0.0)
Conflicts: python-azure-sdk <= 2.0.0
%if 0%{?sle_version} >= 150400
Obsoletes: python3-azure-mgmt-scvmm < 1.0.0b2
@@ -54,10 +54,10 @@
This package has been tested with Python 3.6+.
%prep
-%setup -q -n azure-mgmt-scvmm-%{version}
+%setup -q -n azure-mgmt-scvmm-%{realversion}
%build
-install -m 644 %{SOURCE1} %{_builddir}/azure-mgmt-scvmm-%{version}
+install -m 644 %{SOURCE1} %{_builddir}/azure-mgmt-scvmm-%{realversion}
%pyproject_wheel
%install
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ast-grep for openSUSE:Factory checked in at 2024-06-27 16:04:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ast-grep (Old)
and /work/SRC/openSUSE:Factory/.ast-grep.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ast-grep"
Thu Jun 27 16:04:28 2024 rev:28 rq:1183519 version:0.24.1+0
Changes:
--------
--- /work/SRC/openSUSE:Factory/ast-grep/ast-grep.changes 2024-06-24 20:57:57.582516299 +0200
+++ /work/SRC/openSUSE:Factory/.ast-grep.new.18349/ast-grep.changes 2024-06-27 16:05:09.546704292 +0200
@@ -1,0 +2,7 @@
+Thu Jun 27 05:46:01 UTC 2024 - Michael Vetter <mvetter(a)suse.com>
+
+- Update to 0.24.1:
+ * fix: skip missing node in pattern #1256
+ * doc: add cli help text for debug format 1754382
+
+-------------------------------------------------------------------
Old:
----
ast-grep-0.24.0+0.tar.zst
New:
----
ast-grep-0.24.1+0.tar.zst
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ast-grep.spec ++++++
--- /var/tmp/diff_new_pack.gUO0cf/_old 2024-06-27 16:05:10.622743799 +0200
+++ /var/tmp/diff_new_pack.gUO0cf/_new 2024-06-27 16:05:10.626743946 +0200
@@ -17,7 +17,7 @@
Name: ast-grep
-Version: 0.24.0+0
+Version: 0.24.1+0
Release: 0
Summary: A CLI tool for code structural search, lint and rewriting
License: MIT
++++++ _service ++++++
--- /var/tmp/diff_new_pack.gUO0cf/_old 2024-06-27 16:05:10.662745268 +0200
+++ /var/tmp/diff_new_pack.gUO0cf/_new 2024-06-27 16:05:10.666745415 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/ast-grep/ast-grep.git</param>
<param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
<param name="scm">git</param>
- <param name="revision">0.24.0</param>
+ <param name="revision">0.24.1</param>
<param name="match-tag">*</param>
<param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
<param name="versionrewrite-replacement">\1</param>
++++++ ast-grep-0.24.0+0.tar.zst -> ast-grep-0.24.1+0.tar.zst ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/CHANGELOG.md new/ast-grep-0.24.1+0/CHANGELOG.md
--- old/ast-grep-0.24.0+0/CHANGELOG.md 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/CHANGELOG.md 2024-06-27 01:43:12.000000000 +0200
@@ -4,8 +4,15 @@
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+#### [0.24.1](https://github.com/ast-grep/ast-grep/compare/0.24.0...0.24.1)
+
+- fix: skip missing node in pattern [`#1256`](https://github.com/ast-grep/ast-grep/issues/1256)
+- doc: add cli help text for debug format [`1754382`](https://github.com/ast-grep/ast-grep/commit/17543825a937be9dc56dce648c2782fbe5a96eda)
+
#### [0.24.0](https://github.com/ast-grep/ast-grep/compare/0.23.1...0.24.0)
+> 23 June 2024
+
- feat: add debug ast and cst [`#1218`](https://github.com/ast-grep/ast-grep/issues/1218)
- feat: add strictness in PyO3 [`#1246`](https://github.com/ast-grep/ast-grep/issues/1246)
- feat: add strictness flag in cli [`#1243`](https://github.com/ast-grep/ast-grep/issues/1243)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/Cargo.lock new/ast-grep-0.24.1+0/Cargo.lock
--- old/ast-grep-0.24.0+0/Cargo.lock 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/Cargo.lock 2024-06-27 01:43:12.000000000 +0200
@@ -113,7 +113,7 @@
[[package]]
name = "ast-grep"
-version = "0.24.0"
+version = "0.24.1"
dependencies = [
"ansi_term",
"anyhow",
@@ -145,7 +145,7 @@
[[package]]
name = "ast-grep-config"
-version = "0.24.0"
+version = "0.24.1"
dependencies = [
"anyhow",
"ast-grep-core",
@@ -161,7 +161,7 @@
[[package]]
name = "ast-grep-core"
-version = "0.24.0"
+version = "0.24.1"
dependencies = [
"bit-set",
"regex",
@@ -172,7 +172,7 @@
[[package]]
name = "ast-grep-dynamic"
-version = "0.24.0"
+version = "0.24.1"
dependencies = [
"ast-grep-core",
"ignore",
@@ -184,7 +184,7 @@
[[package]]
name = "ast-grep-language"
-version = "0.24.0"
+version = "0.24.1"
dependencies = [
"ast-grep-core",
"ignore",
@@ -215,7 +215,7 @@
[[package]]
name = "ast-grep-lsp"
-version = "0.24.0"
+version = "0.24.1"
dependencies = [
"ast-grep-config",
"ast-grep-core",
@@ -229,7 +229,7 @@
[[package]]
name = "ast-grep-napi"
-version = "0.24.0"
+version = "0.24.1"
dependencies = [
"ast-grep-config",
"ast-grep-core",
@@ -248,7 +248,7 @@
[[package]]
name = "ast-grep-py"
-version = "0.24.0"
+version = "0.24.1"
dependencies = [
"anyhow",
"ast-grep-config",
@@ -314,7 +314,7 @@
[[package]]
name = "benches"
-version = "0.24.0"
+version = "0.24.1"
dependencies = [
"ast-grep-config",
"ast-grep-core",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/Cargo.toml new/ast-grep-0.24.1+0/Cargo.toml
--- old/ast-grep-0.24.0+0/Cargo.toml 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/Cargo.toml 2024-06-27 01:43:12.000000000 +0200
@@ -11,7 +11,7 @@
lto = true
[workspace.package]
-version = "0.24.0"
+version = "0.24.1"
authors = ["Herrington Darkholme <2883231+HerringtonDarkholme(a)users.noreply.github.com>"]
edition = "2021"
license = "MIT"
@@ -22,11 +22,11 @@
readme = "README.md"
[workspace.dependencies]
-ast-grep-core = { path = "crates/core", version = "0.24.0" }
-ast-grep-config = { path = "crates/config", version = "0.24.0" }
-ast-grep-dynamic = { path = "crates/dynamic", version = "0.24.0" }
-ast-grep-language = { path = "crates/language", version = "0.24.0" }
-ast-grep-lsp = { path = "crates/lsp", version = "0.24.0" }
+ast-grep-core = { path = "crates/core", version = "0.24.1" }
+ast-grep-config = { path = "crates/config", version = "0.24.1" }
+ast-grep-dynamic = { path = "crates/dynamic", version = "0.24.1" }
+ast-grep-language = { path = "crates/language", version = "0.24.1" }
+ast-grep-lsp = { path = "crates/lsp", version = "0.24.1" }
bit-set = { version = "0.5.3" }
ignore = { version = "0.4.22" }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/cli/src/debug.rs new/ast-grep-0.24.1+0/crates/cli/src/debug.rs
--- old/ast-grep-0.24.0+0/crates/cli/src/debug.rs 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/cli/src/debug.rs 2024-06-27 01:43:12.000000000 +0200
@@ -8,9 +8,13 @@
#[derive(Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum DebugFormat {
+ /// Print the query parsed in Pattern format
Pattern,
+ /// Print the query in tree-sitter AST format, only named nodes are shown
Ast,
+ /// Print the query in tree-sitter CST format, both named and unnamed nodes are shown
Cst,
+ /// Print the query in S-expression format
Sexp,
}
impl DebugFormat {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/core/src/matcher/pattern.rs new/ast-grep-0.24.1+0/crates/core/src/matcher/pattern.rs
--- old/ast-grep-0.24.0+0/crates/core/src/matcher/pattern.rs 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/core/src/matcher/pattern.rs 2024-06-27 01:43:12.000000000 +0200
@@ -93,9 +93,16 @@
kind_id: node.kind_id(),
}
} else {
+ let children = node.children().filter_map(|n| {
+ if n.get_ts_node().is_missing() {
+ None
+ } else {
+ Some(PatternNode::from(n))
+ }
+ });
PatternNode::Internal {
kind_id: node.kind_id(),
- children: node.children().map(PatternNode::from).collect(),
+ children: children.collect(),
}
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/language/src/cpp.rs new/ast-grep-0.24.1+0/crates/language/src/cpp.rs
--- old/ast-grep-0.24.0+0/crates/language/src/cpp.rs 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/language/src/cpp.rs 2024-06-27 01:43:12.000000000 +0200
@@ -11,6 +11,7 @@
#[test]
fn test_cpp_pattern() {
test_match("$A->b()", "expr->b()");
+ test_match("if (a) { $$$VERYLONGNAME }", "if (a) { a;b;c; }");
test_match("expr->$B()", "expr->b()");
test_match("ns::ns2::$F()", "ns::ns2::func()");
test_match("template <typename $T>", "template <typename T>");
@@ -30,5 +31,14 @@
fn test_cpp_replace() -> Result<(), TSParseError> {
let ret = test_replace("expr->b()", "$A->b()", "func($A)->b()")?;
assert_eq!(ret, "func(expr)->b()");
+ let ret = test_replace("if (a) { a;b;c; }", "if (a) { $$$A }", "$$$A")?;
+ assert_eq!(ret, "a;b;c;");
+ // https://stackoverflow.com/questions/78663351
+ let ret = test_replace(
+ "if (a) { a;b;c; }",
+ "if (a) { $$$VERYLONGNAME }",
+ "$$$VERYLONGNAME",
+ )?;
+ assert_eq!(ret, "a;b;c;");
Ok(())
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/napi/npm/darwin-arm64/package.json new/ast-grep-0.24.1+0/crates/napi/npm/darwin-arm64/package.json
--- old/ast-grep-0.24.0+0/crates/napi/npm/darwin-arm64/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/napi/npm/darwin-arm64/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/napi-darwin-arm64",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"darwin"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/napi/npm/darwin-x64/package.json new/ast-grep-0.24.1+0/crates/napi/npm/darwin-x64/package.json
--- old/ast-grep-0.24.0+0/crates/napi/npm/darwin-x64/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/napi/npm/darwin-x64/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/napi-darwin-x64",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"darwin"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/napi/npm/linux-arm64-gnu/package.json new/ast-grep-0.24.1+0/crates/napi/npm/linux-arm64-gnu/package.json
--- old/ast-grep-0.24.0+0/crates/napi/npm/linux-arm64-gnu/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/napi/npm/linux-arm64-gnu/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/napi-linux-arm64-gnu",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"linux"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/napi/npm/linux-x64-gnu/package.json new/ast-grep-0.24.1+0/crates/napi/npm/linux-x64-gnu/package.json
--- old/ast-grep-0.24.0+0/crates/napi/npm/linux-x64-gnu/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/napi/npm/linux-x64-gnu/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/napi-linux-x64-gnu",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"linux"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/napi/npm/linux-x64-musl/package.json new/ast-grep-0.24.1+0/crates/napi/npm/linux-x64-musl/package.json
--- old/ast-grep-0.24.0+0/crates/napi/npm/linux-x64-musl/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/napi/npm/linux-x64-musl/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/napi-linux-x64-musl",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"linux"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/napi/npm/win32-arm64-msvc/package.json new/ast-grep-0.24.1+0/crates/napi/npm/win32-arm64-msvc/package.json
--- old/ast-grep-0.24.0+0/crates/napi/npm/win32-arm64-msvc/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/napi/npm/win32-arm64-msvc/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/napi-win32-arm64-msvc",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"win32"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/napi/npm/win32-ia32-msvc/package.json new/ast-grep-0.24.1+0/crates/napi/npm/win32-ia32-msvc/package.json
--- old/ast-grep-0.24.0+0/crates/napi/npm/win32-ia32-msvc/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/napi/npm/win32-ia32-msvc/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/napi-win32-ia32-msvc",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"win32"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/napi/npm/win32-x64-msvc/package.json new/ast-grep-0.24.1+0/crates/napi/npm/win32-x64-msvc/package.json
--- old/ast-grep-0.24.0+0/crates/napi/npm/win32-x64-msvc/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/napi/npm/win32-x64-msvc/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/napi-win32-x64-msvc",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"win32"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/napi/package.json new/ast-grep-0.24.1+0/crates/napi/package.json
--- old/ast-grep-0.24.0+0/crates/napi/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/napi/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/napi",
- "version": "0.24.0",
+ "version": "0.24.1",
"description": "Search and Rewrite code at large scale using precise AST pattern",
"homepage": "https://ast-grep.github.io",
"main": "index.js",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/crates/pyo3/pyproject.toml new/ast-grep-0.24.1+0/crates/pyo3/pyproject.toml
--- old/ast-grep-0.24.0+0/crates/pyo3/pyproject.toml 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/crates/pyo3/pyproject.toml 2024-06-27 01:43:12.000000000 +0200
@@ -5,7 +5,7 @@
[project]
name = "ast-grep-py"
requires-python = ">=3.8"
-version = "0.24.0"
+version = "0.24.1"
description = "Structural Search and Rewrite code at large scale using precise AST pattern."
authors = [{ name = "Herrington Darkholme", email = "2883231+HerringtonDarkholme(a)users.noreply.github.com" }]
maintainers = [{ name = "Herrington Darkholme", email = "2883231+HerringtonDarkholme(a)users.noreply.github.com" }]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/npm/package.json new/ast-grep-0.24.1+0/npm/package.json
--- old/ast-grep-0.24.0+0/npm/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/npm/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/cli",
- "version": "0.24.0",
+ "version": "0.24.1",
"publishConfig": {
"access": "public"
},
@@ -29,13 +29,13 @@
"postinstall": "node postinstall.js"
},
"optionalDependencies": {
- "@ast-grep/cli-win32-arm64-msvc": "0.24.0",
- "@ast-grep/cli-win32-ia32-msvc": "0.24.0",
- "@ast-grep/cli-win32-x64-msvc": "0.24.0",
- "@ast-grep/cli-darwin-arm64": "0.24.0",
- "@ast-grep/cli-darwin-x64": "0.24.0",
- "@ast-grep/cli-linux-arm64-gnu": "0.24.0",
- "@ast-grep/cli-linux-x64-gnu": "0.24.0"
+ "@ast-grep/cli-win32-arm64-msvc": "0.24.1",
+ "@ast-grep/cli-win32-ia32-msvc": "0.24.1",
+ "@ast-grep/cli-win32-x64-msvc": "0.24.1",
+ "@ast-grep/cli-darwin-arm64": "0.24.1",
+ "@ast-grep/cli-darwin-x64": "0.24.1",
+ "@ast-grep/cli-linux-arm64-gnu": "0.24.1",
+ "@ast-grep/cli-linux-x64-gnu": "0.24.1"
},
"bin": {
"sg": "sg",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/npm/platforms/darwin-arm64/package.json new/ast-grep-0.24.1+0/npm/platforms/darwin-arm64/package.json
--- old/ast-grep-0.24.0+0/npm/platforms/darwin-arm64/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/npm/platforms/darwin-arm64/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/cli-darwin-arm64",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"darwin"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/npm/platforms/darwin-x64/package.json new/ast-grep-0.24.1+0/npm/platforms/darwin-x64/package.json
--- old/ast-grep-0.24.0+0/npm/platforms/darwin-x64/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/npm/platforms/darwin-x64/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/cli-darwin-x64",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"darwin"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/npm/platforms/linux-arm64-gnu/package.json new/ast-grep-0.24.1+0/npm/platforms/linux-arm64-gnu/package.json
--- old/ast-grep-0.24.0+0/npm/platforms/linux-arm64-gnu/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/npm/platforms/linux-arm64-gnu/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/cli-linux-arm64-gnu",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"linux"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/npm/platforms/linux-x64-gnu/package.json new/ast-grep-0.24.1+0/npm/platforms/linux-x64-gnu/package.json
--- old/ast-grep-0.24.0+0/npm/platforms/linux-x64-gnu/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/npm/platforms/linux-x64-gnu/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/cli-linux-x64-gnu",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"linux"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/npm/platforms/win32-arm64-msvc/package.json new/ast-grep-0.24.1+0/npm/platforms/win32-arm64-msvc/package.json
--- old/ast-grep-0.24.0+0/npm/platforms/win32-arm64-msvc/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/npm/platforms/win32-arm64-msvc/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/cli-win32-arm64-msvc",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"win32"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/npm/platforms/win32-ia32-msvc/package.json new/ast-grep-0.24.1+0/npm/platforms/win32-ia32-msvc/package.json
--- old/ast-grep-0.24.0+0/npm/platforms/win32-ia32-msvc/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/npm/platforms/win32-ia32-msvc/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/cli-win32-ia32-msvc",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"win32"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/npm/platforms/win32-x64-msvc/package.json new/ast-grep-0.24.1+0/npm/platforms/win32-x64-msvc/package.json
--- old/ast-grep-0.24.0+0/npm/platforms/win32-x64-msvc/package.json 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/npm/platforms/win32-x64-msvc/package.json 2024-06-27 01:43:12.000000000 +0200
@@ -1,6 +1,6 @@
{
"name": "@ast-grep/cli-win32-x64-msvc",
- "version": "0.24.0",
+ "version": "0.24.1",
"os": [
"win32"
],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ast-grep-0.24.0+0/pyproject.toml new/ast-grep-0.24.1+0/pyproject.toml
--- old/ast-grep-0.24.0+0/pyproject.toml 2024-06-24 01:24:13.000000000 +0200
+++ new/ast-grep-0.24.1+0/pyproject.toml 2024-06-27 01:43:12.000000000 +0200
@@ -4,7 +4,7 @@
[project]
name = "ast-grep-cli"
-version = "0.24.0"
+version = "0.24.1"
description = "Structural Search and Rewrite code at large scale using precise AST pattern."
authors = [{ name = "Herrington Darkholme", email = "2883231+HerringtonDarkholme(a)users.noreply.github.com" }]
maintainers = [{ name = "Herrington Darkholme", email = "2883231+HerringtonDarkholme(a)users.noreply.github.com" }]
++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/ast-grep/vendor.tar.zst /work/SRC/openSUSE:Factory/.ast-grep.new.18349/vendor.tar.zst differ: char 441803, line 1796
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package openQA for openSUSE:Factory checked in at 2024-06-27 16:04:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openQA (Old)
and /work/SRC/openSUSE:Factory/.openQA.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openQA"
Thu Jun 27 16:04:10 2024 rev:591 rq:1183512 version:4.6.1719403951.26949373
Changes:
--------
openQA-devel-test.changes: same change
openQA-test.changes: same change
openQA-worker-test.changes: same change
--- /work/SRC/openSUSE:Factory/openQA/openQA.changes 2024-06-25 23:07:50.219092038 +0200
+++ /work/SRC/openSUSE:Factory/.openQA.new.18349/openQA.changes 2024-06-27 16:04:56.998243303 +0200
@@ -1,0 +2,8 @@
+Thu Jun 27 01:13:58 UTC 2024 - okurz(a)suse.com
+
+- Update to version 4.6.1719403951.26949373:
+ * apparmor: Allow 'sleep' as needed in os-autoinst scripts
+ * Bump @floating-ui/dom from 1.6.5 to 1.6.6
+ * Document automatic Git checkouts
+
+-------------------------------------------------------------------
Old:
----
openQA-4.6.1718962077.0a0dae67.obscpio
New:
----
openQA-4.6.1719403951.26949373.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openQA-client-test.spec ++++++
--- /var/tmp/diff_new_pack.fP5D7l/_old 2024-06-27 16:04:58.106284012 +0200
+++ /var/tmp/diff_new_pack.fP5D7l/_new 2024-06-27 16:04:58.110284159 +0200
@@ -18,7 +18,7 @@
%define short_name openQA-client
Name: %{short_name}-test
-Version: 4.6.1718962077.0a0dae67
+Version: 4.6.1719403951.26949373
Release: 0
Summary: Test package for %{short_name}
License: GPL-2.0-or-later
++++++ openQA-devel-test.spec ++++++
--- /var/tmp/diff_new_pack.fP5D7l/_old 2024-06-27 16:04:58.142285335 +0200
+++ /var/tmp/diff_new_pack.fP5D7l/_new 2024-06-27 16:04:58.146285482 +0200
@@ -18,7 +18,7 @@
%define short_name openQA-devel
Name: %{short_name}-test
-Version: 4.6.1718962077.0a0dae67
+Version: 4.6.1719403951.26949373
Release: 0
Summary: Test package for %{short_name}
License: GPL-2.0-or-later
++++++ openQA-test.spec ++++++
--- /var/tmp/diff_new_pack.fP5D7l/_old 2024-06-27 16:04:58.170286363 +0200
+++ /var/tmp/diff_new_pack.fP5D7l/_new 2024-06-27 16:04:58.174286510 +0200
@@ -18,7 +18,7 @@
%define short_name openQA
Name: %{short_name}-test
-Version: 4.6.1718962077.0a0dae67
+Version: 4.6.1719403951.26949373
Release: 0
Summary: Test package for openQA
License: GPL-2.0-or-later
++++++ openQA-worker-test.spec ++++++
--- /var/tmp/diff_new_pack.fP5D7l/_old 2024-06-27 16:04:58.202287539 +0200
+++ /var/tmp/diff_new_pack.fP5D7l/_new 2024-06-27 16:04:58.202287539 +0200
@@ -18,7 +18,7 @@
%define short_name openQA-worker
Name: %{short_name}-test
-Version: 4.6.1718962077.0a0dae67
+Version: 4.6.1719403951.26949373
Release: 0
Summary: Test package for %{short_name}
License: GPL-2.0-or-later
++++++ openQA.spec ++++++
--- /var/tmp/diff_new_pack.fP5D7l/_old 2024-06-27 16:04:58.230288568 +0200
+++ /var/tmp/diff_new_pack.fP5D7l/_new 2024-06-27 16:04:58.234288715 +0200
@@ -78,7 +78,7 @@
%define devel_requires %devel_no_selenium_requires chromedriver
Name: openQA
-Version: 4.6.1718962077.0a0dae67
+Version: 4.6.1719403951.26949373
Release: 0
Summary: The openQA web-frontend, scheduler and tools
License: GPL-2.0-or-later
++++++ node_modules.obscpio ++++++
/work/SRC/openSUSE:Factory/openQA/node_modules.obscpio /work/SRC/openSUSE:Factory/.openQA.new.18349/node_modules.obscpio differ: char 343253, line 1261
++++++ node_modules.spec.inc ++++++
--- /var/tmp/diff_new_pack.fP5D7l/_old 2024-06-27 16:04:58.298291066 +0200
+++ /var/tmp/diff_new_pack.fP5D7l/_new 2024-06-27 16:04:58.302291213 +0200
@@ -5,8 +5,8 @@
Source1004: https://registry.npmjs.org/@eslint/js/-/js-9.5.0.tgz#/@eslint-js-9.5.0.tgz
Source1005: https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz#…
Source1006: https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz#/@floating-ui…
-Source1007: https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz#/@floating-ui-d…
-Source1008: https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz#/@floating-…
+Source1007: https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.6.tgz#/@floating-ui-d…
+Source1008: https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.3.tgz#/@floating-…
Source1009: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer…
Source1010: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz#/@humanwh…
Source1011: https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#/@nod…
++++++ openQA-4.6.1718962077.0a0dae67.obscpio -> openQA-4.6.1719403951.26949373.obscpio ++++++
/work/SRC/openSUSE:Factory/openQA/openQA-4.6.1718962077.0a0dae67.obscpio /work/SRC/openSUSE:Factory/.openQA.new.18349/openQA-4.6.1719403951.26949373.obscpio differ: char 50, line 1
++++++ openQA.obsinfo ++++++
--- /var/tmp/diff_new_pack.fP5D7l/_old 2024-06-27 16:04:58.350292977 +0200
+++ /var/tmp/diff_new_pack.fP5D7l/_new 2024-06-27 16:04:58.354293124 +0200
@@ -1,5 +1,5 @@
name: openQA
-version: 4.6.1718962077.0a0dae67
-mtime: 1718962077
-commit: 0a0dae67e0428aa2fdacd88446b7c0b9b7cbb3ff
+version: 4.6.1719403951.26949373
+mtime: 1719403951
+commit: 26949373401942c72d1e1f2c0c37780cb2681b1c
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python38 for openSUSE:Factory checked in at 2024-06-27 16:04:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python38 (Old)
and /work/SRC/openSUSE:Factory/.python38.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python38"
Thu Jun 27 16:04:04 2024 rev:49 rq:1183507 version:3.8.19
Changes:
--------
--- /work/SRC/openSUSE:Factory/python38/python38.changes 2024-06-22 13:23:59.947929994 +0200
+++ /work/SRC/openSUSE:Factory/.python38.new.18349/python38.changes 2024-06-27 16:04:52.670084289 +0200
@@ -1,0 +2,7 @@
+Tue Jun 25 21:57:40 UTC 2024 - Matej Cepl <mcepl(a)cepl.eu>
+
+- Add CVE-2024-4032-private-IP-addrs.patch to fix bsc#1226448
+ (CVE-2024-4032) rearranging definition of private v global IP
+ addresses.
+
+-------------------------------------------------------------------
New:
----
CVE-2024-4032-private-IP-addrs.patch
BETA DEBUG BEGIN:
New:
- Add CVE-2024-4032-private-IP-addrs.patch to fix bsc#1226448
(CVE-2024-4032) rearranging definition of private v global IP
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python38.spec ++++++
--- /var/tmp/diff_new_pack.cwNokr/_old 2024-06-27 16:04:53.766124557 +0200
+++ /var/tmp/diff_new_pack.cwNokr/_new 2024-06-27 16:04:53.770124704 +0200
@@ -189,6 +189,9 @@
# PATCH-FIX-UPSTREAM CVE-2024-0397-memrace_ssl.SSLContext_cert_store.patch bsc#1226447 mcepl(a)suse.com
# removes memory race condition in ssl.SSLContext certificate store methods
Patch44: CVE-2024-0397-memrace_ssl.SSLContext_cert_store.patch
+# PATCH-FIX-UPSTREAM CVE-2024-4032-private-IP-addrs.patch bsc#1226448 mcepl(a)suse.com
+# rearrange definition of private v global IP addresses
+Patch45: CVE-2024-4032-private-IP-addrs.patch
BuildRequires: autoconf-archive
BuildRequires: automake
BuildRequires: fdupes
@@ -463,6 +466,7 @@
%patch -P 42 -p1
%patch -P 43 -p1
%patch -P 44 -p1
+%patch -P 45 -p1
# drop Autoconf version requirement
sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac
++++++ CVE-2024-4032-private-IP-addrs.patch ++++++
From 05a14677846ed0a35773cd2ba582f9a65a3dfa48 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <encukou(a)gmail.com>
Date: Wed, 24 Apr 2024 14:29:30 +0200
Subject: [PATCH 1/3] gh-113171: gh-65056: Fix "private" (non-global) IP
address ranges (GH-113179) (GH-113186) (GH-118177)
* GH-113171: Fix "private" (non-global) IP address ranges (GH-113179)
The _private_networks variables, used by various is_private
implementations, were missing some ranges and at the same time had
overly strict ranges (where there are more specific ranges considered
globally reachable by the IANA registries).
This patch updates the ranges with what was missing or otherwise
incorrect.
100.64.0.0/10 is left alone, for now, as it's been made special in [1].
The _address_exclude_many() call returns 8 networks for IPv4, 121
networks for IPv6.
[1] https://github.com/python/cpython/issues/61602
* GH-65056: Improve the IP address' is_global/is_private documentation (GH-113186)
It wasn't clear what the semantics of is_global/is_private are and, when
one gets to the bottom of it, it's not quite so simple (hence the
exceptions listed).
(cherry picked from commit 2a4cbf17af19a01d942f9579342f77c39fbd23c4)
(cherry picked from commit 40d75c2b7f5c67e254d0a025e0f2e2c7ada7f69f)
---------
(cherry picked from commit f86b17ac511e68192ba71f27e752321a3252cee3)
Co-authored-by: Jakub Stasiak <jakub(a)stasiak.at>
---
Doc/library/ipaddress.rst | 43 ++++++++-
Doc/whatsnew/3.8.rst | 9 ++
Lib/ipaddress.py | 95 +++++++++++++++----
Lib/test/test_ipaddress.py | 52 ++++++++++
...-03-14-01-38-44.gh-issue-113171.VFnObz.rst | 9 ++
5 files changed, 187 insertions(+), 21 deletions(-)
create mode 100644 Misc/NEWS.d/next/Library/2024-03-14-01-38-44.gh-issue-113171.VFnObz.rst
diff --git a/Doc/library/ipaddress.rst b/Doc/library/ipaddress.rst
index 5e21d5db2ed9c3..5944e33bb1b339 100644
--- a/Doc/library/ipaddress.rst
+++ b/Doc/library/ipaddress.rst
@@ -179,18 +179,53 @@ write code that handles both IP versions correctly. Address objects are
.. attribute:: is_private
- ``True`` if the address is allocated for private networks. See
+ ``True`` if the address is defined as not globally reachable by
iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
- (for IPv6).
+ (for IPv6) with the following exceptions:
+
+ * ``is_private`` is ``False`` for the shared address space (``100.64.0.0/10``)
+ * For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_private == address.ipv4_mapped.is_private
+
+ ``is_private`` has value opposite to :attr:`is_global`, except for the shared address space
+ (``100.64.0.0/10`` range) where they are both ``False``.
+
+ .. versionchanged:: 3.8.20
+
+ Fixed some false positives and false negatives.
+
+ * ``192.0.0.0/24`` is considered private with the exception of ``192.0.0.9/32`` and
+ ``192.0.0.10/32`` (previously: only the ``192.0.0.0/29`` sub-range was considered private).
+ * ``64:ff9b:1::/48`` is considered private.
+ * ``2002::/16`` is considered private.
+ * There are exceptions within ``2001::/23`` (otherwise considered private): ``2001:1::1/128``,
+ ``2001:1::2/128``, ``2001:3::/32``, ``2001:4:112::/48``, ``2001:20::/28``, ``2001:30::/28``.
+ The exceptions are not considered private.
.. attribute:: is_global
- ``True`` if the address is allocated for public networks. See
+ ``True`` if the address is defined as globally reachable by
iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
- (for IPv6).
+ (for IPv6) with the following exception:
+
+ For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_global == address.ipv4_mapped.is_global
+
+ ``is_global`` has value opposite to :attr:`is_private`, except for the shared address space
+ (``100.64.0.0/10`` range) where they are both ``False``.
.. versionadded:: 3.4
+ .. versionchanged:: 3.8.20
+
+ Fixed some false positives and false negatives, see :attr:`is_private` for details.
+
.. attribute:: is_unspecified
``True`` if the address is unspecified. See :RFC:`5735` (for IPv4)
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index e5278da3f6a5be..de4dd856877543 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -2355,3 +2355,12 @@ tarfile
:exc:`DeprecationWarning`.
In Python 3.14, the default will switch to ``'data'``.
(Contributed by Petr Viktorin in :pep:`706`.)
+
+Notable changes in 3.8.20
+=========================
+
+ipaddress
+---------
+
+* Fixed ``is_global`` and ``is_private`` behavior in ``IPv4Address``,
+ ``IPv6Address``, ``IPv4Network`` and ``IPv6Network``.
diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
index d351f07a5bd960..142c3b13b1617e 100644
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -1275,18 +1275,41 @@ def is_reserved(self):
@property
@functools.lru_cache()
def is_private(self):
- """Test if this address is allocated for private networks.
+ """``True`` if the address is defined as not globally reachable by
+ iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
+ (for IPv6) with the following exceptions:
- Returns:
- A boolean, True if the address is reserved per
- iana-ipv4-special-registry.
+ * ``is_private`` is ``False`` for ``100.64.0.0/10``
+ * For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_private == address.ipv4_mapped.is_private
+ ``is_private`` has value opposite to :attr:`is_global`, except for the ``100.64.0.0/10``
+ IPv4 range where they are both ``False``.
"""
- return any(self in net for net in self._constants._private_networks)
+ return (
+ any(self in net for net in self._constants._private_networks)
+ and all(self not in net for net in self._constants._private_networks_exceptions)
+ )
@property
@functools.lru_cache()
def is_global(self):
+ """``True`` if the address is defined as globally reachable by
+ iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
+ (for IPv6) with the following exception:
+
+ For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_global == address.ipv4_mapped.is_global
+
+ ``is_global`` has value opposite to :attr:`is_private`, except for the ``100.64.0.0/10``
+ IPv4 range where they are both ``False``.
+ """
return self not in self._constants._public_network and not self.is_private
@property
@@ -1490,13 +1513,15 @@ class _IPv4Constants:
_public_network = IPv4Network('100.64.0.0/10')
+ # Not globally reachable address blocks listed on
+ # https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-speci…
_private_networks = [
IPv4Network('0.0.0.0/8'),
IPv4Network('10.0.0.0/8'),
IPv4Network('127.0.0.0/8'),
IPv4Network('169.254.0.0/16'),
IPv4Network('172.16.0.0/12'),
- IPv4Network('192.0.0.0/29'),
+ IPv4Network('192.0.0.0/24'),
IPv4Network('192.0.0.170/31'),
IPv4Network('192.0.2.0/24'),
IPv4Network('192.168.0.0/16'),
@@ -1507,6 +1532,11 @@ class _IPv4Constants:
IPv4Network('255.255.255.255/32'),
]
+ _private_networks_exceptions = [
+ IPv4Network('192.0.0.9/32'),
+ IPv4Network('192.0.0.10/32'),
+ ]
+
_reserved_network = IPv4Network('240.0.0.0/4')
_unspecified_address = IPv4Address('0.0.0.0')
@@ -1897,23 +1927,42 @@ def is_site_local(self):
@property
@functools.lru_cache()
def is_private(self):
- """Test if this address is allocated for private networks.
+ """``True`` if the address is defined as not globally reachable by
+ iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
+ (for IPv6) with the following exceptions:
- Returns:
- A boolean, True if the address is reserved per
- iana-ipv6-special-registry.
+ * ``is_private`` is ``False`` for ``100.64.0.0/10``
+ * For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_private == address.ipv4_mapped.is_private
+ ``is_private`` has value opposite to :attr:`is_global`, except for the ``100.64.0.0/10``
+ IPv4 range where they are both ``False``.
"""
- return any(self in net for net in self._constants._private_networks)
+ ipv4_mapped = self.ipv4_mapped
+ if ipv4_mapped is not None:
+ return ipv4_mapped.is_private
+ return (
+ any(self in net for net in self._constants._private_networks)
+ and all(self not in net for net in self._constants._private_networks_exceptions)
+ )
@property
def is_global(self):
- """Test if this address is allocated for public networks.
+ """``True`` if the address is defined as globally reachable by
+ iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
+ (for IPv6) with the following exception:
- Returns:
- A boolean, true if the address is not reserved per
- iana-ipv6-special-registry.
+ For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_global == address.ipv4_mapped.is_global
+ ``is_global`` has value opposite to :attr:`is_private`, except for the ``100.64.0.0/10``
+ IPv4 range where they are both ``False``.
"""
return not self.is_private
@@ -2154,19 +2203,31 @@ class _IPv6Constants:
_multicast_network = IPv6Network('ff00::/8')
+ # Not globally reachable address blocks listed on
+ # https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-speci…
_private_networks = [
IPv6Network('::1/128'),
IPv6Network('::/128'),
IPv6Network('::ffff:0:0/96'),
+ IPv6Network('64:ff9b:1::/48'),
IPv6Network('100::/64'),
IPv6Network('2001::/23'),
- IPv6Network('2001:2::/48'),
IPv6Network('2001:db8::/32'),
- IPv6Network('2001:10::/28'),
+ # IANA says N/A, let's consider it not globally reachable to be safe
+ IPv6Network('2002::/16'),
IPv6Network('fc00::/7'),
IPv6Network('fe80::/10'),
]
+ _private_networks_exceptions = [
+ IPv6Network('2001:1::1/128'),
+ IPv6Network('2001:1::2/128'),
+ IPv6Network('2001:3::/32'),
+ IPv6Network('2001:4:112::/48'),
+ IPv6Network('2001:20::/28'),
+ IPv6Network('2001:30::/28'),
+ ]
+
_reserved_networks = [
IPv6Network('::/8'), IPv6Network('100::/8'),
IPv6Network('200::/7'), IPv6Network('400::/6'),
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
index 1297b8371d8583..46002111b3270a 100644
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -1761,6 +1761,10 @@ def testReservedIpv4(self):
self.assertEqual(True, ipaddress.ip_address(
'172.31.255.255').is_private)
self.assertEqual(False, ipaddress.ip_address('172.32.0.0').is_private)
+ self.assertFalse(ipaddress.ip_address('192.0.0.0').is_global)
+ self.assertTrue(ipaddress.ip_address('192.0.0.9').is_global)
+ self.assertTrue(ipaddress.ip_address('192.0.0.10').is_global)
+ self.assertFalse(ipaddress.ip_address('192.0.0.255').is_global)
self.assertEqual(True,
ipaddress.ip_address('169.254.100.200').is_link_local)
@@ -1776,6 +1780,40 @@ def testReservedIpv4(self):
self.assertEqual(False, ipaddress.ip_address('128.0.0.0').is_loopback)
self.assertEqual(True, ipaddress.ip_network('0.0.0.0').is_unspecified)
+ def testPrivateNetworks(self):
+ self.assertEqual(False, ipaddress.ip_network("0.0.0.0/0").is_private)
+ self.assertEqual(False, ipaddress.ip_network("1.0.0.0/8").is_private)
+
+ self.assertEqual(True, ipaddress.ip_network("0.0.0.0/8").is_private)
+ self.assertEqual(True, ipaddress.ip_network("10.0.0.0/8").is_private)
+ self.assertEqual(True, ipaddress.ip_network("127.0.0.0/8").is_private)
+ self.assertEqual(True, ipaddress.ip_network("169.254.0.0/16").is_private)
+ self.assertEqual(True, ipaddress.ip_network("172.16.0.0/12").is_private)
+ self.assertEqual(True, ipaddress.ip_network("192.0.0.0/29").is_private)
+ self.assertEqual(False, ipaddress.ip_network("192.0.0.9/32").is_private)
+ self.assertEqual(True, ipaddress.ip_network("192.0.0.170/31").is_private)
+ self.assertEqual(True, ipaddress.ip_network("192.0.2.0/24").is_private)
+ self.assertEqual(True, ipaddress.ip_network("192.168.0.0/16").is_private)
+ self.assertEqual(True, ipaddress.ip_network("198.18.0.0/15").is_private)
+ self.assertEqual(True, ipaddress.ip_network("198.51.100.0/24").is_private)
+ self.assertEqual(True, ipaddress.ip_network("203.0.113.0/24").is_private)
+ self.assertEqual(True, ipaddress.ip_network("240.0.0.0/4").is_private)
+ self.assertEqual(True, ipaddress.ip_network("255.255.255.255/32").is_private)
+
+ self.assertEqual(False, ipaddress.ip_network("::/0").is_private)
+ self.assertEqual(False, ipaddress.ip_network("::ff/128").is_private)
+
+ self.assertEqual(True, ipaddress.ip_network("::1/128").is_private)
+ self.assertEqual(True, ipaddress.ip_network("::/128").is_private)
+ self.assertEqual(True, ipaddress.ip_network("::ffff:0:0/96").is_private)
+ self.assertEqual(True, ipaddress.ip_network("100::/64").is_private)
+ self.assertEqual(True, ipaddress.ip_network("2001:2::/48").is_private)
+ self.assertEqual(False, ipaddress.ip_network("2001:3::/48").is_private)
+ self.assertEqual(True, ipaddress.ip_network("2001:db8::/32").is_private)
+ self.assertEqual(True, ipaddress.ip_network("2001:10::/28").is_private)
+ self.assertEqual(True, ipaddress.ip_network("fc00::/7").is_private)
+ self.assertEqual(True, ipaddress.ip_network("fe80::/10").is_private)
+
def testReservedIpv6(self):
self.assertEqual(True, ipaddress.ip_network('ffff::').is_multicast)
@@ -1849,6 +1887,20 @@ def testReservedIpv6(self):
self.assertEqual(True, ipaddress.ip_address('0::0').is_unspecified)
self.assertEqual(False, ipaddress.ip_address('::1').is_unspecified)
+ self.assertFalse(ipaddress.ip_address('64:ff9b:1::').is_global)
+ self.assertFalse(ipaddress.ip_address('2001::').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:1::1').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:1::2').is_global)
+ self.assertFalse(ipaddress.ip_address('2001:2::').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:3::').is_global)
+ self.assertFalse(ipaddress.ip_address('2001:4::').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:4:112::').is_global)
+ self.assertFalse(ipaddress.ip_address('2001:10::').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:20::').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:30::').is_global)
+ self.assertFalse(ipaddress.ip_address('2001:40::').is_global)
+ self.assertFalse(ipaddress.ip_address('2002::').is_global)
+
# some generic IETF reserved addresses
self.assertEqual(True, ipaddress.ip_address('100::').is_reserved)
self.assertEqual(True, ipaddress.ip_network('4000::1/128').is_reserved)
diff --git a/Misc/NEWS.d/next/Library/2024-03-14-01-38-44.gh-issue-113171.VFnObz.rst b/Misc/NEWS.d/next/Library/2024-03-14-01-38-44.gh-issue-113171.VFnObz.rst
new file mode 100644
index 00000000000000..f9a72473be4e2c
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-03-14-01-38-44.gh-issue-113171.VFnObz.rst
@@ -0,0 +1,9 @@
+Fixed various false positives and false negatives in
+
+* :attr:`ipaddress.IPv4Address.is_private` (see these docs for details)
+* :attr:`ipaddress.IPv4Address.is_global`
+* :attr:`ipaddress.IPv6Address.is_private`
+* :attr:`ipaddress.IPv6Address.is_global`
+
+Also in the corresponding :class:`ipaddress.IPv4Network` and :class:`ipaddress.IPv6Network`
+attributes.
From 2e92223a4298fbf18c1c7f853b6d883943c00c52 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <encukou(a)gmail.com>
Date: Wed, 24 Apr 2024 15:16:13 +0200
Subject: [PATCH 2/3] Adjust test for 3.10 semantics of is_private on networks
In 3.10 and below, is_private checks whether the network and broadcast
address are both private.
In later versions (where the test wss backported from), it checks
whether they both are in the same private network.
For 0.0.0.0/0, both 0.0.0.0 and 255.225.255.255 are private,
but one is in 0.0.0.0/8 ("This network") and the other in
255.255.255.255/32 ("Limited broadcast").
---
Lib/test/test_ipaddress.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
index 46002111b3270a..fad40334f0d317 100644
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -1781,7 +1781,7 @@ def testReservedIpv4(self):
self.assertEqual(True, ipaddress.ip_network('0.0.0.0').is_unspecified)
def testPrivateNetworks(self):
- self.assertEqual(False, ipaddress.ip_network("0.0.0.0/0").is_private)
+ self.assertEqual(True, ipaddress.ip_network("0.0.0.0/0").is_private)
self.assertEqual(False, ipaddress.ip_network("1.0.0.0/8").is_private)
self.assertEqual(True, ipaddress.ip_network("0.0.0.0/8").is_private)
From e366724f6e290b71ec49005079e8472c3cac2594 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <encukou(a)gmail.com>
Date: Wed, 1 May 2024 15:29:13 +0200
Subject: [PATCH 3/3] Add IPv6 addresses to suspignore.csv
That's a lot of semicolons!
---
Doc/tools/susp-ignored.csv | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv
index dd6aa38d72adcc..fadeab3f98f2d7 100644
--- a/Doc/tools/susp-ignored.csv
+++ b/Doc/tools/susp-ignored.csv
@@ -158,6 +158,14 @@ library/ipaddress,,:db00,2001:db00::0/24
library/ipaddress,,::,2001:db00::0/24
library/ipaddress,,:db00,2001:db00::0/ffff:ff00::
library/ipaddress,,::,2001:db00::0/ffff:ff00::
+library/ipaddress,,:ff9b,64:ff9b:1::/48
+library/ipaddress,,::,64:ff9b:1::/48
+library/ipaddress,,::,2001::
+library/ipaddress,,::,2001:1::
+library/ipaddress,,::,2001:3::
+library/ipaddress,,::,2001:4:112::
+library/ipaddress,,::,2001:20::
+library/ipaddress,,::,2001:30::
library/itertools,,:step,elements from seq[start:stop:step]
library/itertools,,:stop,elements from seq[start:stop:step]
library/logging.handlers,,:port,host:port
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python39 for openSUSE:Factory checked in at 2024-06-27 16:04:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python39 (Old)
and /work/SRC/openSUSE:Factory/.python39.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python39"
Thu Jun 27 16:04:00 2024 rev:58 rq:1183504 version:3.9.19
Changes:
--------
--- /work/SRC/openSUSE:Factory/python39/python39.changes 2024-06-22 13:23:58.427874412 +0200
+++ /work/SRC/openSUSE:Factory/.python39.new.18349/python39.changes 2024-06-27 16:04:49.873981562 +0200
@@ -1,0 +2,7 @@
+Wed Jun 26 22:22:17 UTC 2024 - Matej Cepl <mcepl(a)cepl.eu>
+
+- Add CVE-2024-4032-private-IP-addrs.patch to fix bsc#1226448
+ (CVE-2024-4032) rearranging definition of private v global IP
+ addresses.
+
+-------------------------------------------------------------------
New:
----
CVE-2024-4032-private-IP-addrs.patch
BETA DEBUG BEGIN:
New:
- Add CVE-2024-4032-private-IP-addrs.patch to fix bsc#1226448
(CVE-2024-4032) rearranging definition of private v global IP
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python39.spec ++++++
--- /var/tmp/diff_new_pack.PlWgRl/_old 2024-06-27 16:04:50.942020801 +0200
+++ /var/tmp/diff_new_pack.PlWgRl/_new 2024-06-27 16:04:50.942020801 +0200
@@ -184,6 +184,9 @@
# PATCH-FIX-UPSTREAM CVE-2024-0397-memrace_ssl.SSLContext_cert_store.patch bsc#1226447 mcepl(a)suse.com
# removes memory race condition in ssl.SSLContext certificate store methods
Patch44: CVE-2024-0397-memrace_ssl.SSLContext_cert_store.patch
+# PATCH-FIX-UPSTREAM CVE-2024-4032-private-IP-addrs.patch bsc#1226448 mcepl(a)suse.com
+# rearrange definition of private v global IP addresses
+Patch45: CVE-2024-4032-private-IP-addrs.patch
BuildRequires: autoconf-archive
BuildRequires: automake
BuildRequires: fdupes
@@ -450,6 +453,7 @@
%patch -P 42 -p1
%patch -P 43 -p1
%patch -P 44 -p1
+%patch -P 45 -p1
# drop Autoconf version requirement
sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac
++++++ CVE-2024-4032-private-IP-addrs.patch ++++++
From 5e58376d424fb951966277e5d46cf0b11d860ef3 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <encukou(a)gmail.com>
Date: Wed, 24 Apr 2024 14:29:30 +0200
Subject: [PATCH 1/3] gh-113171: gh-65056: Fix "private" (non-global) IP
address ranges (GH-113179) (GH-113186) (GH-118177)
* GH-113171: Fix "private" (non-global) IP address ranges (GH-113179)
The _private_networks variables, used by various is_private
implementations, were missing some ranges and at the same time had
overly strict ranges (where there are more specific ranges considered
globally reachable by the IANA registries).
This patch updates the ranges with what was missing or otherwise
incorrect.
100.64.0.0/10 is left alone, for now, as it's been made special in [1].
The _address_exclude_many() call returns 8 networks for IPv4, 121
networks for IPv6.
[1] https://github.com/python/cpython/issues/61602
* GH-65056: Improve the IP address' is_global/is_private documentation (GH-113186)
It wasn't clear what the semantics of is_global/is_private are and, when
one gets to the bottom of it, it's not quite so simple (hence the
exceptions listed).
(cherry picked from commit 2a4cbf17af19a01d942f9579342f77c39fbd23c4)
(cherry picked from commit 40d75c2b7f5c67e254d0a025e0f2e2c7ada7f69f)
---------
(cherry picked from commit f86b17ac511e68192ba71f27e752321a3252cee3)
Co-authored-by: Jakub Stasiak <jakub(a)stasiak.at>
---
Doc/library/ipaddress.rst | 43 +++-
Doc/tools/susp-ignored.csv | 8
Doc/whatsnew/3.9.rst | 9
Lib/ipaddress.py | 107 +++++++---
Lib/test/test_ipaddress.py | 52 ++++
Misc/NEWS.d/next/Library/2024-03-14-01-38-44.gh-issue-113171.VFnObz.rst | 9
6 files changed, 201 insertions(+), 27 deletions(-)
create mode 100644 Misc/NEWS.d/next/Library/2024-03-14-01-38-44.gh-issue-113171.VFnObz.rst
--- a/Doc/library/ipaddress.rst
+++ b/Doc/library/ipaddress.rst
@@ -188,18 +188,53 @@ write code that handles both IP versions
.. attribute:: is_private
- ``True`` if the address is allocated for private networks. See
+ ``True`` if the address is defined as not globally reachable by
iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
- (for IPv6).
+ (for IPv6) with the following exceptions:
+
+ * ``is_private`` is ``False`` for the shared address space (``100.64.0.0/10``)
+ * For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_private == address.ipv4_mapped.is_private
+
+ ``is_private`` has value opposite to :attr:`is_global`, except for the shared address space
+ (``100.64.0.0/10`` range) where they are both ``False``.
+
+ .. versionchanged:: 3.9.20
+
+ Fixed some false positives and false negatives.
+
+ * ``192.0.0.0/24`` is considered private with the exception of ``192.0.0.9/32`` and
+ ``192.0.0.10/32`` (previously: only the ``192.0.0.0/29`` sub-range was considered private).
+ * ``64:ff9b:1::/48`` is considered private.
+ * ``2002::/16`` is considered private.
+ * There are exceptions within ``2001::/23`` (otherwise considered private): ``2001:1::1/128``,
+ ``2001:1::2/128``, ``2001:3::/32``, ``2001:4:112::/48``, ``2001:20::/28``, ``2001:30::/28``.
+ The exceptions are not considered private.
.. attribute:: is_global
- ``True`` if the address is allocated for public networks. See
+ ``True`` if the address is defined as globally reachable by
iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
- (for IPv6).
+ (for IPv6) with the following exception:
+
+ For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_global == address.ipv4_mapped.is_global
+
+ ``is_global`` has value opposite to :attr:`is_private`, except for the shared address space
+ (``100.64.0.0/10`` range) where they are both ``False``.
.. versionadded:: 3.4
+ .. versionchanged:: 3.9.20
+
+ Fixed some false positives and false negatives, see :attr:`is_private` for details.
+
.. attribute:: is_unspecified
``True`` if the address is unspecified. See :RFC:`5735` (for IPv4)
--- a/Doc/tools/susp-ignored.csv
+++ b/Doc/tools/susp-ignored.csv
@@ -169,6 +169,14 @@ library/ipaddress,,:db00,2001:db00::0/24
library/ipaddress,,::,2001:db00::0/24
library/ipaddress,,:db00,2001:db00::0/ffff:ff00::
library/ipaddress,,::,2001:db00::0/ffff:ff00::
+library/ipaddress,,:ff9b,64:ff9b:1::/48
+library/ipaddress,,::,64:ff9b:1::/48
+library/ipaddress,,::,2001::
+library/ipaddress,,::,2001:1::
+library/ipaddress,,::,2001:3::
+library/ipaddress,,::,2001:4:112::
+library/ipaddress,,::,2001:20::
+library/ipaddress,,::,2001:30::
library/itertools,,:step,elements from seq[start:stop:step]
library/itertools,,:stop,elements from seq[start:stop:step]
library/itertools,,::,kernel = tuple(kernel)[::-1]
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -1616,3 +1616,12 @@ tarfile
:exc:`DeprecationWarning`.
In Python 3.14, the default will switch to ``'data'``.
(Contributed by Petr Viktorin in :pep:`706`.)
+
+Notable changes in 3.9.20
+=========================
+
+ipaddress
+---------
+
+* Fixed ``is_global`` and ``is_private`` behavior in ``IPv4Address``,
+ ``IPv6Address``, ``IPv4Network`` and ``IPv6Network``.
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -1322,18 +1322,41 @@ class IPv4Address(_BaseV4, _BaseAddress)
@property
@functools.lru_cache()
def is_private(self):
- """Test if this address is allocated for private networks.
-
- Returns:
- A boolean, True if the address is reserved per
- iana-ipv4-special-registry.
-
- """
- return any(self in net for net in self._constants._private_networks)
+ """``True`` if the address is defined as not globally reachable by
+ iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
+ (for IPv6) with the following exceptions:
+
+ * ``is_private`` is ``False`` for ``100.64.0.0/10``
+ * For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_private == address.ipv4_mapped.is_private
+
+ ``is_private`` has value opposite to :attr:`is_global`, except for the ``100.64.0.0/10``
+ IPv4 range where they are both ``False``.
+ """
+ return (
+ any(self in net for net in self._constants._private_networks)
+ and all(self not in net for net in self._constants._private_networks_exceptions)
+ )
@property
@functools.lru_cache()
def is_global(self):
+ """``True`` if the address is defined as globally reachable by
+ iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
+ (for IPv6) with the following exception:
+
+ For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_global == address.ipv4_mapped.is_global
+
+ ``is_global`` has value opposite to :attr:`is_private`, except for the ``100.64.0.0/10``
+ IPv4 range where they are both ``False``.
+ """
return self not in self._constants._public_network and not self.is_private
@property
@@ -1537,13 +1560,15 @@ class _IPv4Constants:
_public_network = IPv4Network('100.64.0.0/10')
+ # Not globally reachable address blocks listed on
+ # https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-speci…
_private_networks = [
IPv4Network('0.0.0.0/8'),
IPv4Network('10.0.0.0/8'),
IPv4Network('127.0.0.0/8'),
IPv4Network('169.254.0.0/16'),
IPv4Network('172.16.0.0/12'),
- IPv4Network('192.0.0.0/29'),
+ IPv4Network('192.0.0.0/24'),
IPv4Network('192.0.0.170/31'),
IPv4Network('192.0.2.0/24'),
IPv4Network('192.168.0.0/16'),
@@ -1554,6 +1579,11 @@ class _IPv4Constants:
IPv4Network('255.255.255.255/32'),
]
+ _private_networks_exceptions = [
+ IPv4Network('192.0.0.9/32'),
+ IPv4Network('192.0.0.10/32'),
+ ]
+
_reserved_network = IPv4Network('240.0.0.0/4')
_unspecified_address = IPv4Address('0.0.0.0')
@@ -1995,23 +2025,42 @@ class IPv6Address(_BaseV6, _BaseAddress)
@property
@functools.lru_cache()
def is_private(self):
- """Test if this address is allocated for private networks.
-
- Returns:
- A boolean, True if the address is reserved per
- iana-ipv6-special-registry.
-
- """
- return any(self in net for net in self._constants._private_networks)
+ """``True`` if the address is defined as not globally reachable by
+ iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
+ (for IPv6) with the following exceptions:
+
+ * ``is_private`` is ``False`` for ``100.64.0.0/10``
+ * For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
+
+ address.is_private == address.ipv4_mapped.is_private
+
+ ``is_private`` has value opposite to :attr:`is_global`, except for the ``100.64.0.0/10``
+ IPv4 range where they are both ``False``.
+ """
+ ipv4_mapped = self.ipv4_mapped
+ if ipv4_mapped is not None:
+ return ipv4_mapped.is_private
+ return (
+ any(self in net for net in self._constants._private_networks)
+ and all(self not in net for net in self._constants._private_networks_exceptions)
+ )
@property
def is_global(self):
- """Test if this address is allocated for public networks.
+ """``True`` if the address is defined as globally reachable by
+ iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
+ (for IPv6) with the following exception:
+
+ For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the
+ semantics of the underlying IPv4 addresses and the following condition holds
+ (see :attr:`IPv6Address.ipv4_mapped`)::
- Returns:
- A boolean, true if the address is not reserved per
- iana-ipv6-special-registry.
+ address.is_global == address.ipv4_mapped.is_global
+ ``is_global`` has value opposite to :attr:`is_private`, except for the ``100.64.0.0/10``
+ IPv4 range where they are both ``False``.
"""
return not self.is_private
@@ -2252,19 +2301,31 @@ class _IPv6Constants:
_multicast_network = IPv6Network('ff00::/8')
+ # Not globally reachable address blocks listed on
+ # https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-speci…
_private_networks = [
IPv6Network('::1/128'),
IPv6Network('::/128'),
IPv6Network('::ffff:0:0/96'),
+ IPv6Network('64:ff9b:1::/48'),
IPv6Network('100::/64'),
IPv6Network('2001::/23'),
- IPv6Network('2001:2::/48'),
IPv6Network('2001:db8::/32'),
- IPv6Network('2001:10::/28'),
+ # IANA says N/A, let's consider it not globally reachable to be safe
+ IPv6Network('2002::/16'),
IPv6Network('fc00::/7'),
IPv6Network('fe80::/10'),
]
+ _private_networks_exceptions = [
+ IPv6Network('2001:1::1/128'),
+ IPv6Network('2001:1::2/128'),
+ IPv6Network('2001:3::/32'),
+ IPv6Network('2001:4:112::/48'),
+ IPv6Network('2001:20::/28'),
+ IPv6Network('2001:30::/28'),
+ ]
+
_reserved_networks = [
IPv6Network('::/8'), IPv6Network('100::/8'),
IPv6Network('200::/7'), IPv6Network('400::/6'),
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -2263,6 +2263,10 @@ class IpaddrUnitTest(unittest.TestCase):
self.assertEqual(True, ipaddress.ip_address(
'172.31.255.255').is_private)
self.assertEqual(False, ipaddress.ip_address('172.32.0.0').is_private)
+ self.assertFalse(ipaddress.ip_address('192.0.0.0').is_global)
+ self.assertTrue(ipaddress.ip_address('192.0.0.9').is_global)
+ self.assertTrue(ipaddress.ip_address('192.0.0.10').is_global)
+ self.assertFalse(ipaddress.ip_address('192.0.0.255').is_global)
self.assertEqual(True,
ipaddress.ip_address('169.254.100.200').is_link_local)
@@ -2278,6 +2282,40 @@ class IpaddrUnitTest(unittest.TestCase):
self.assertEqual(False, ipaddress.ip_address('128.0.0.0').is_loopback)
self.assertEqual(True, ipaddress.ip_network('0.0.0.0').is_unspecified)
+ def testPrivateNetworks(self):
+ self.assertEqual(True, ipaddress.ip_network("0.0.0.0/0").is_private)
+ self.assertEqual(False, ipaddress.ip_network("1.0.0.0/8").is_private)
+
+ self.assertEqual(True, ipaddress.ip_network("0.0.0.0/8").is_private)
+ self.assertEqual(True, ipaddress.ip_network("10.0.0.0/8").is_private)
+ self.assertEqual(True, ipaddress.ip_network("127.0.0.0/8").is_private)
+ self.assertEqual(True, ipaddress.ip_network("169.254.0.0/16").is_private)
+ self.assertEqual(True, ipaddress.ip_network("172.16.0.0/12").is_private)
+ self.assertEqual(True, ipaddress.ip_network("192.0.0.0/29").is_private)
+ self.assertEqual(False, ipaddress.ip_network("192.0.0.9/32").is_private)
+ self.assertEqual(True, ipaddress.ip_network("192.0.0.170/31").is_private)
+ self.assertEqual(True, ipaddress.ip_network("192.0.2.0/24").is_private)
+ self.assertEqual(True, ipaddress.ip_network("192.168.0.0/16").is_private)
+ self.assertEqual(True, ipaddress.ip_network("198.18.0.0/15").is_private)
+ self.assertEqual(True, ipaddress.ip_network("198.51.100.0/24").is_private)
+ self.assertEqual(True, ipaddress.ip_network("203.0.113.0/24").is_private)
+ self.assertEqual(True, ipaddress.ip_network("240.0.0.0/4").is_private)
+ self.assertEqual(True, ipaddress.ip_network("255.255.255.255/32").is_private)
+
+ self.assertEqual(False, ipaddress.ip_network("::/0").is_private)
+ self.assertEqual(False, ipaddress.ip_network("::ff/128").is_private)
+
+ self.assertEqual(True, ipaddress.ip_network("::1/128").is_private)
+ self.assertEqual(True, ipaddress.ip_network("::/128").is_private)
+ self.assertEqual(True, ipaddress.ip_network("::ffff:0:0/96").is_private)
+ self.assertEqual(True, ipaddress.ip_network("100::/64").is_private)
+ self.assertEqual(True, ipaddress.ip_network("2001:2::/48").is_private)
+ self.assertEqual(False, ipaddress.ip_network("2001:3::/48").is_private)
+ self.assertEqual(True, ipaddress.ip_network("2001:db8::/32").is_private)
+ self.assertEqual(True, ipaddress.ip_network("2001:10::/28").is_private)
+ self.assertEqual(True, ipaddress.ip_network("fc00::/7").is_private)
+ self.assertEqual(True, ipaddress.ip_network("fe80::/10").is_private)
+
def testReservedIpv6(self):
self.assertEqual(True, ipaddress.ip_network('ffff::').is_multicast)
@@ -2351,6 +2389,20 @@ class IpaddrUnitTest(unittest.TestCase):
self.assertEqual(True, ipaddress.ip_address('0::0').is_unspecified)
self.assertEqual(False, ipaddress.ip_address('::1').is_unspecified)
+ self.assertFalse(ipaddress.ip_address('64:ff9b:1::').is_global)
+ self.assertFalse(ipaddress.ip_address('2001::').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:1::1').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:1::2').is_global)
+ self.assertFalse(ipaddress.ip_address('2001:2::').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:3::').is_global)
+ self.assertFalse(ipaddress.ip_address('2001:4::').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:4:112::').is_global)
+ self.assertFalse(ipaddress.ip_address('2001:10::').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:20::').is_global)
+ self.assertTrue(ipaddress.ip_address('2001:30::').is_global)
+ self.assertFalse(ipaddress.ip_address('2001:40::').is_global)
+ self.assertFalse(ipaddress.ip_address('2002::').is_global)
+
# some generic IETF reserved addresses
self.assertEqual(True, ipaddress.ip_address('100::').is_reserved)
self.assertEqual(True, ipaddress.ip_network('4000::1/128').is_reserved)
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-03-14-01-38-44.gh-issue-113171.VFnObz.rst
@@ -0,0 +1,9 @@
+Fixed various false positives and false negatives in
+
+* :attr:`ipaddress.IPv4Address.is_private` (see these docs for details)
+* :attr:`ipaddress.IPv4Address.is_global`
+* :attr:`ipaddress.IPv6Address.is_private`
+* :attr:`ipaddress.IPv6Address.is_global`
+
+Also in the corresponding :class:`ipaddress.IPv4Network` and :class:`ipaddress.IPv6Network`
+attributes.
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package mingw32-binutils for openSUSE:Factory checked in at 2024-06-27 16:03:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mingw32-binutils (Old)
and /work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mingw32-binutils"
Thu Jun 27 16:03:52 2024 rev:10 rq:1183496 version:2.42
Changes:
--------
--- /work/SRC/openSUSE:Factory/mingw32-binutils/mingw32-binutils.changes 2024-06-03 17:44:44.321842598 +0200
+++ /work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes 2024-06-27 16:04:43.245738044 +0200
@@ -1,0 +2,33 @@
+Thu Jun 20 10:31:41 UTC 2024 - Ralf Habacker <ralf.habacker(a)freenet.de>
+
+- Fixes:
+ * mingw32-binutils.spec: W: patch-fuzz-is-changed
+ * "mingw32-binutils.keyring" is not mentioned in spec files as
+ source or patch
+ * mingw32-binutils.noarch: E: zero-length
+ /usr/i686-w64-mingw32/sys-root/mingw/lib/ldscripts/stamp
+ * mingw32-binutils.src: E: unused-rpmlintrc-filter
+ "arch-independent-package-contains-binary-or-object"
+
+-------------------------------------------------------------------
+Sat Jun 15 10:09:01 UTC 2024 - Ralf Habacker <ralf.habacker(a)freenet.de>
+
+- Fix "binutils-2.42.tar.xz.sig" is not mentioned in spec files as
+ source or patch.
+
+-------------------------------------------------------------------
+Mon Jun 3 06:55:27 UTC 2024 - Ralf Habacker <ralf.habacker(a)freenet.de>
+
+- Update to version 2.42
+- Add mingw32-binutils.keyring
+- Removed patches that were included in the official version
+ * 0001-dllwrap-windres-and-dlltools-use-mktemp-which-should.patch
+ * 0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
+ * 0001-PR29362-some-binutils-memory-leaks.patch
+ * reproducible.patch
+- Add patch
+ * binutils-2.42-option-high-entry-va.patch
+- Removed patch
+ * binutils-2.39-option-high-entry-va.patch
+
+-------------------------------------------------------------------
--- /work/SRC/openSUSE:Factory/mingw32-binutils/mingw32-cross-binutils.changes 2024-06-03 17:44:44.513849648 +0200
+++ /work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes 2024-06-27 16:04:43.941763616 +0200
@@ -1,0 +2,32 @@
+Thu Jun 20 10:31:41 UTC 2024 - Ralf Habacker <ralf.habacker(a)freenet.de>
+
+- Fixes:
+ * mingw32-binutils.spec: W: patch-fuzz-is-changed
+ * "mingw32-binutils.keyring" is not mentioned in spec files as
+ source or patch
+ * mingw32-binutils.noarch: E: zero-length
+ /usr/i686-w64-mingw32/lib/ldscripts/stamp
+ * mingw32-binutils.src: E: unused-rpmlintrc-filter
+ "arch-independent-package-contains-binary-or-object"
+
+-------------------------------------------------------------------
+Sat Jun 15 10:09:01 UTC 2024 - Ralf Habacker <ralf.habacker(a)freenet.de>
+
+- Fix "binutils-2.42.tar.xz.sig" is not mentioned in spec files as
+ source or patch.
+
+-------------------------------------------------------------------
+Mon Jun 3 06:55:46 UTC 2024 - Ralf Habacker <ralf.habacker(a)freenet.de>
+
+- Update to version 2.42
+- Removed patches that were included in the official version
+ * 0001-dllwrap-windres-and-dlltools-use-mktemp-which-should.patch
+ * 0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
+ * 0001-PR29362-some-binutils-memory-leaks.patch
+ * reproducible.patch
+- Add patch
+ * binutils-2.42-option-high-entry-va.patch
+- Removed patch
+ * binutils-2.39-option-high-entry-va.patch
+
+-------------------------------------------------------------------
Old:
----
0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
0001-PR29362-some-binutils-memory-leaks.patch
0001-dllwrap-windres-and-dlltools-use-mktemp-which-should.patch
binutils-2.39-option-high-entry-va.patch
binutils-2.39.tar.xz
reproducible.patch
New:
----
binutils-2.42-option-high-entry-va.patch
binutils-2.42.tar.xz
binutils-2.42.tar.xz.sig
mingw32-binutils.keyring
BETA DEBUG BEGIN:
Old:/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes- * 0001-dllwrap-windres-and-dlltools-use-mktemp-which-should.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes: * 0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes- * 0001-PR29362-some-binutils-memory-leaks.patch
--
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes- * 0001-dllwrap-windres-and-dlltools-use-mktemp-which-should.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes: * 0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes- * 0001-PR29362-some-binutils-memory-leaks.patch
Old:/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes- * 0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes: * 0001-PR29362-some-binutils-memory-leaks.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes- * reproducible.patch
--
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes- * 0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes: * 0001-PR29362-some-binutils-memory-leaks.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes- * reproducible.patch
Old:/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes-- Removed patches that were included in the official version
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes: * 0001-dllwrap-windres-and-dlltools-use-mktemp-which-should.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes- * 0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
--
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes-- Removed patches that were included in the official version
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes: * 0001-dllwrap-windres-and-dlltools-use-mktemp-which-should.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes- * 0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
Old:/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes-- Removed patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes: * binutils-2.39-option-high-entry-va.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes-
--
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes-- Removed patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes: * binutils-2.39-option-high-entry-va.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes-
Old:/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes- * 0001-PR29362-some-binutils-memory-leaks.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes: * reproducible.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes-- Add patch
--
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes- * 0001-PR29362-some-binutils-memory-leaks.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes: * reproducible.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes-- Add patch
BETA DEBUG END:
BETA DEBUG BEGIN:
New:/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes-- Add patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes: * binutils-2.42-option-high-entry-va.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-binutils.changes-- Removed patch
--
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes-- Add patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes: * binutils-2.42-option-high-entry-va.patch
/work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/mingw32-cross-binutils.changes-- Removed patch
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mingw32-binutils.spec ++++++
--- /var/tmp/diff_new_pack.HIC229/_old 2024-06-27 16:04:45.289813142 +0200
+++ /var/tmp/diff_new_pack.HIC229/_new 2024-06-27 16:04:45.289813142 +0200
@@ -16,22 +16,18 @@
#
-%global _default_patch_fuzz 2
-
Name: mingw32-binutils
-Version: 2.39
+Version: 2.42
Release: 0
Summary: GNU Binutils
License: GPL-2.0-or-later AND LGPL-2.1-or-later AND GPL-3.0-or-later AND LGPL-3.0-or-later
Group: Development/Libraries
URL: http://www.gnu.org/software/binutils/
Source: http://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.xz
+Source1: http://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.xz.sig
+Source2: mingw32-binutils.keyring
Source99: mingw32-binutils-rpmlintrc
-Patch0: 0001-PR29362-some-binutils-memory-leaks.patch
-Patch1: 0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
-Patch2: 0001-dllwrap-windres-and-dlltools-use-mktemp-which-should.patch
-Patch3: reproducible.patch
-Patch4: binutils-2.39-option-high-entry-va.patch
+Patch0: binutils-2.42-option-high-entry-va.patch
#!BuildIgnore: post-build-checks
BuildRequires: bison
BuildRequires: flex
@@ -77,6 +73,13 @@
rm -f %{buildroot}%{_mingw32_infodir}/dir
+# mingw32-binutils.noarch: E: zero-length .../lib/ldscripts/stamp
+for i in %{buildroot}%{_mingw32_prefix}/%{_mingw32_target}/lib/ldscripts/stamp; do
+ if test -f $i; then
+ rm $i
+ fi
+done
+
%files
%{_mingw32_bindir}/*.exe
%{_mingw32_prefix}/%{_mingw32_target}/bin/*.exe
@@ -91,7 +94,8 @@
%{_mingw32_libdir}/libbfd.a
%{_mingw32_libdir}/libctf.a
%{_mingw32_libdir}/libctf-nobfd.a
-%{_mingw32_libdir}/libopcodes.a
# required by libbfd.a
%{_mingw32_libdir}/libiberty.a
+%{_mingw32_libdir}/libopcodes.a
+%{_mingw32_libdir}/libsframe.a
++++++ mingw32-cross-binutils.spec ++++++
--- /var/tmp/diff_new_pack.HIC229/_old 2024-06-27 16:04:45.369816082 +0200
+++ /var/tmp/diff_new_pack.HIC229/_new 2024-06-27 16:04:45.369816082 +0200
@@ -16,21 +16,16 @@
#
-%global _default_patch_fuzz 2
-
Name: mingw32-cross-binutils
-Version: 2.39
+Version: 2.42
Release: 0
Summary: GNU Binutils
License: GPL-2.0-or-later AND LGPL-2.1-or-later AND GPL-3.0-or-later AND LGPL-3.0-or-later
Group: Development/Libraries
URL: http://www.gnu.org/software/binutils/
Source: http://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.xz
-Patch0: 0001-PR29362-some-binutils-memory-leaks.patch
-Patch1: 0001-Fix-bug-not-showing-correct-path-with-objdump-WL-wit.patch
-Patch2: 0001-dllwrap-windres-and-dlltools-use-mktemp-which-should.patch
-Patch3: reproducible.patch
-Patch4: binutils-2.39-option-high-entry-va.patch
+Source1: http://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.xz.sig
+Patch0: binutils-2.42-option-high-entry-va.patch
#!BuildIgnore: post-build-checks
#!BuildIgnore: mingw32-cross-binutils-utils
#!BuildIgnore: mingw32-cross-pkgconf-utils
@@ -85,6 +80,13 @@
ln -s %{_prefix}/%{_mingw32_target}/bin/$i %{buildroot}%{_bindir}/%{_mingw32_target}-$i;
done
+# mingw32-cross-binutils.x86_64: E: zero-length /usr/i686-w64-mingw32/lib/ldscripts/stamp
+for i in %{buildroot}%{_prefix}/%{_mingw32_target}/lib/ldscripts/stamp; do
+ if test -f $i; then
+ rm $i
+ fi
+done
+
%files
%{_mandir}/man1/*
%exclude %{_mandir}/man1/%{_mingw32_target}-nm.1.gz
++++++ binutils-2.39-option-high-entry-va.patch -> binutils-2.42-option-high-entry-va.patch ++++++
--- /work/SRC/openSUSE:Factory/mingw32-binutils/binutils-2.39-option-high-entry-va.patch 2024-06-03 17:44:44.245839807 +0200
+++ /work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/binutils-2.42-option-high-entry-va.patch 2024-06-27 16:04:39.961617388 +0200
@@ -1,7 +1,7 @@
-diff -ru binutils-2.39.orig/ld/emultempl/pe.em binutils-2.39/ld/emultempl/pe.em
---- binutils-2.39.orig/ld/emultempl/pe.em 2022-07-08 11:46:48.000000000 +0200
-+++ binutils-2.39/ld/emultempl/pe.em 2024-05-31 17:03:45.730816373 +0200
-@@ -116,6 +116,7 @@
+diff -ur binutils-2.42.orig/ld/emultempl/pe.em binutils-2.42/ld/emultempl/pe.em
+--- binutils-2.42.orig/ld/emultempl/pe.em 2024-01-29 01:00:00.000000000 +0100
++++ binutils-2.42/ld/emultempl/pe.em 2024-06-03 09:22:53.442422519 +0200
+@@ -128,6 +128,7 @@
#define DEFAULT_DLL_CHARACTERISTICS (${cygwin_behavior} ? 0 : \
IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE \
@@ -9,27 +9,23 @@
| IMAGE_DLL_CHARACTERISTICS_NX_COMPAT)
#if defined(TARGET_IS_i386pe) || ! defined(DLL_SUPPORT)
-@@ -272,7 +273,8 @@
- #define OPTION_DISABLE_LONG_SECTION_NAMES \
- (OPTION_ENABLE_LONG_SECTION_NAMES + 1)
+@@ -285,6 +286,7 @@
+ OPTION_ENABLE_LONG_SECTION_NAMES,
+ OPTION_DISABLE_LONG_SECTION_NAMES,
/* DLLCharacteristics flags. */
--#define OPTION_DYNAMIC_BASE (OPTION_DISABLE_LONG_SECTION_NAMES + 1)
-+#define OPTION_HIGH_ENTROPY_VA (OPTION_DISABLE_LONG_SECTION_NAMES + 1)
-+#define OPTION_DYNAMIC_BASE (OPTION_HIGH_ENTROPY_VA + 1)
- #define OPTION_FORCE_INTEGRITY (OPTION_DYNAMIC_BASE + 1)
- #define OPTION_NX_COMPAT (OPTION_FORCE_INTEGRITY + 1)
- #define OPTION_NO_ISOLATION (OPTION_NX_COMPAT + 1)
-@@ -287,7 +289,8 @@
- #define OPTION_ENABLE_RELOC_SECTION (OPTION_BUILD_ID + 1)
- #define OPTION_DISABLE_RELOC_SECTION (OPTION_ENABLE_RELOC_SECTION + 1)
++ OPTION_HIGH_ENTROPY_VA,
+ OPTION_DYNAMIC_BASE,
+ OPTION_FORCE_INTEGRITY,
+ OPTION_NX_COMPAT,
+@@ -303,6 +305,7 @@
+ OPTION_ENABLE_RELOC_SECTION,
+ OPTION_DISABLE_RELOC_SECTION,
/* DLL Characteristics flags. */
--#define OPTION_DISABLE_DYNAMIC_BASE (OPTION_DISABLE_RELOC_SECTION + 1)
-+#define OPTION_DISABLE_HIGH_ENTROPY_VA (OPTION_DISABLE_RELOC_SECTION + 1)
-+#define OPTION_DISABLE_DYNAMIC_BASE (OPTION_DISABLE_HIGH_ENTROPY_VA + 1)
- #define OPTION_DISABLE_FORCE_INTEGRITY (OPTION_DISABLE_DYNAMIC_BASE + 1)
- #define OPTION_DISABLE_NX_COMPAT (OPTION_DISABLE_FORCE_INTEGRITY + 1)
- #define OPTION_DISABLE_NO_ISOLATION (OPTION_DISABLE_NX_COMPAT + 1)
-@@ -366,6 +369,8 @@
++ OPTION_DISABLE_HIGH_ENTROPY_VA,
+ OPTION_DISABLE_DYNAMIC_BASE,
+ OPTION_DISABLE_FORCE_INTEGRITY,
+ OPTION_DISABLE_NX_COMPAT,
+@@ -382,6 +385,8 @@
{"disable-large-address-aware", no_argument, NULL, OPTION_DISABLE_LARGE_ADDRESS_AWARE},
{"enable-long-section-names", no_argument, NULL, OPTION_ENABLE_LONG_SECTION_NAMES},
{"disable-long-section-names", no_argument, NULL, OPTION_DISABLE_LONG_SECTION_NAMES},
@@ -38,7 +34,7 @@
{"dynamicbase",no_argument, NULL, OPTION_DYNAMIC_BASE},
{"disable-dynamicbase",no_argument, NULL, OPTION_DISABLE_DYNAMIC_BASE},
{"forceinteg", no_argument, NULL, OPTION_FORCE_INTEGRITY},
-@@ -893,6 +898,9 @@
+@@ -935,6 +940,9 @@
pe_use_coff_long_section_names = 0;
break;
/* Get DLLCharacteristics bits */
@@ -48,7 +44,7 @@
case OPTION_DYNAMIC_BASE:
pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE;
/* fall through */
-@@ -904,6 +912,9 @@
+@@ -946,6 +954,9 @@
/* fall through */
case OPTION_DISABLE_DYNAMIC_BASE:
pe_dll_characteristics &= ~ IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE;
++++++ binutils-2.39.tar.xz -> binutils-2.42.tar.xz ++++++
/work/SRC/openSUSE:Factory/mingw32-binutils/binutils-2.39.tar.xz /work/SRC/openSUSE:Factory/.mingw32-binutils.new.18349/binutils-2.42.tar.xz differ: char 25, line 1
++++++ mingw32-binutils-rpmlintrc ++++++
--- /var/tmp/diff_new_pack.HIC229/_old 2024-06-27 16:04:45.457819315 +0200
+++ /var/tmp/diff_new_pack.HIC229/_new 2024-06-27 16:04:45.461819462 +0200
@@ -1,3 +1,3 @@
-addFilter('arch-independent-package-contains-binary-or-object')
+
(No newline at EOF)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package haproxy for openSUSE:Factory checked in at 2024-06-27 16:03:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/haproxy (Old)
and /work/SRC/openSUSE:Factory/.haproxy.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "haproxy"
Thu Jun 27 16:03:48 2024 rev:145 rq:1183498 version:3.0.2+git0.a45a8e623
Changes:
--------
--- /work/SRC/openSUSE:Factory/haproxy/haproxy.changes 2024-06-11 18:27:56.701916368 +0200
+++ /work/SRC/openSUSE:Factory/.haproxy.new.18349/haproxy.changes 2024-06-27 16:04:37.901541702 +0200
@@ -1,0 +2,27 @@
+Sun Jun 16 06:44:56 UTC 2024 - andreas.stieger(a)gmx.de
+
+- Update to version 3.0.2+git0.a45a8e623:
+ * [RELEASE] Released version 3.0.2
+ * DOC: management: rename show stats domain cli "dns" to "resolvers"
+ * DOC/MINOR: management: add -dZ option
+ * DOC/MINOR: management: add missed -dR and -dv options
+ * BUG/MINOR: quic: fix padding of INITIAL packets
+ * BUG/MAJOR: mux-h1: Prevent any UAF on H1 connection after draining a request
+ * CLEANUP: log/proxy: fix comment in proxy_free_common()
+ * BUG/MEDIUM: proxy: fix UAF with {tcp,http}checks logformat expressions
+ * MINOR: proxy: add proxy_free_common() helper function
+ * BUG/MINOR: promex: Skip resolvers metrics when there is no resolver section
+ * DOC: config: add missing context hint for new server and proxy keywords
+ * DOC: config: add missing section hint for "guid" proxy keyword
+ * DOC: config: move "hash-key" from proxy to server options
+ * BUG/MEDIUM: log: fix lf_expr_postcheck() behavior with default section
+ * BUG/MINOR: proxy: fix header_unique_id leak on deinit()
+ * BUG/MINOR: proxy: fix source interface and usesrc leaks on deinit()
+ * BUG/MINOR: proxy: fix dyncookie_key leak on deinit()
+ * BUG/MINOR: proxy: fix check_{command,path} leak on deinit()
+ * BUG/MINOR: proxy: fix email-alert leak on deinit()
+ * BUG/MINOR: proxy: fix log_tag leak on deinit()
+ * BUG/MINOR: proxy: fix server_id_hdr_name leak on deinit()
+ * MINOR: log: fix "http-send-name-header" ignore warning message
+
+-------------------------------------------------------------------
Old:
----
haproxy-3.0.1+git0.471a1b2f1.tar.gz
New:
----
haproxy-3.0.2+git0.a45a8e623.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ haproxy.spec ++++++
--- /var/tmp/diff_new_pack.Myfg8k/_old 2024-06-27 16:04:38.713571535 +0200
+++ /var/tmp/diff_new_pack.Myfg8k/_new 2024-06-27 16:04:38.713571535 +0200
@@ -53,7 +53,7 @@
%endif
Name: haproxy
-Version: 3.0.1+git0.471a1b2f1
+Version: 3.0.2+git0.a45a8e623
Release: 0
#
#
++++++ _service ++++++
--- /var/tmp/diff_new_pack.Myfg8k/_old 2024-06-27 16:04:38.749572858 +0200
+++ /var/tmp/diff_new_pack.Myfg8k/_new 2024-06-27 16:04:38.749572858 +0200
@@ -6,7 +6,7 @@
<param name="versionformat">@PARENT_TAG@+git@TAG_OFFSET@.%h</param>
<param name="versionrewrite-pattern">v(.*)</param>
<param name="versionrewrite-replacement">\1</param>
- <param name="revision">v3.0.1</param>
+ <param name="revision">v3.0.2</param>
<param name="changesgenerate">enable</param>
</service>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Myfg8k/_old 2024-06-27 16:04:38.769573593 +0200
+++ /var/tmp/diff_new_pack.Myfg8k/_new 2024-06-27 16:04:38.773573740 +0200
@@ -1,7 +1,7 @@
<servicedata>
<service name="tar_scm">
<param name="url">http://git.haproxy.org/git/haproxy-3.0.git/</param>
- <param name="changesrevision">471a1b2f11d7367ac03056a3d840146741341b64</param>
+ <param name="changesrevision">a45a8e6235853e787e59b13f07355f4729ae3c8e</param>
</service>
</servicedata>
(No newline at EOF)
++++++ haproxy-3.0.1+git0.471a1b2f1.tar.gz -> haproxy-3.0.2+git0.a45a8e623.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.0.1+git0.471a1b2f1/CHANGELOG new/haproxy-3.0.2+git0.a45a8e623/CHANGELOG
--- old/haproxy-3.0.1+git0.471a1b2f1/CHANGELOG 2024-06-10 16:15:30.000000000 +0200
+++ new/haproxy-3.0.2+git0.a45a8e623/CHANGELOG 2024-06-14 15:00:35.000000000 +0200
@@ -1,6 +1,29 @@
ChangeLog :
===========
+2024/06/14 : 3.0.2
+ - MINOR: log: fix "http-send-name-header" ignore warning message
+ - BUG/MINOR: proxy: fix server_id_hdr_name leak on deinit()
+ - BUG/MINOR: proxy: fix log_tag leak on deinit()
+ - BUG/MINOR: proxy: fix email-alert leak on deinit()
+ - BUG/MINOR: proxy: fix check_{command,path} leak on deinit()
+ - BUG/MINOR: proxy: fix dyncookie_key leak on deinit()
+ - BUG/MINOR: proxy: fix source interface and usesrc leaks on deinit()
+ - BUG/MINOR: proxy: fix header_unique_id leak on deinit()
+ - BUG/MEDIUM: log: fix lf_expr_postcheck() behavior with default section
+ - DOC: config: move "hash-key" from proxy to server options
+ - DOC: config: add missing section hint for "guid" proxy keyword
+ - DOC: config: add missing context hint for new server and proxy keywords
+ - BUG/MINOR: promex: Skip resolvers metrics when there is no resolver section
+ - MINOR: proxy: add proxy_free_common() helper function
+ - BUG/MEDIUM: proxy: fix UAF with {tcp,http}checks logformat expressions
+ - CLEANUP: log/proxy: fix comment in proxy_free_common()
+ - BUG/MAJOR: mux-h1: Prevent any UAF on H1 connection after draining a request
+ - BUG/MINOR: quic: fix padding of INITIAL packets
+ - DOC/MINOR: management: add missed -dR and -dv options
+ - DOC/MINOR: management: add -dZ option
+ - DOC: management: rename show stats domain cli "dns" to "resolvers"
+
2024/06/10 : 3.0.1
- BUG/MINOR: cfgparse: remove the correct option on httpcheck send-state warning
- BUG/MINOR: tcpcheck: report correct error in tcp-check rule parser
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.0.1+git0.471a1b2f1/VERDATE new/haproxy-3.0.2+git0.a45a8e623/VERDATE
--- old/haproxy-3.0.1+git0.471a1b2f1/VERDATE 2024-06-10 16:15:30.000000000 +0200
+++ new/haproxy-3.0.2+git0.a45a8e623/VERDATE 2024-06-14 15:00:35.000000000 +0200
@@ -1,2 +1,2 @@
$Format:%ci$
-2024/06/10
+2024/06/14
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.0.1+git0.471a1b2f1/VERSION new/haproxy-3.0.2+git0.a45a8e623/VERSION
--- old/haproxy-3.0.1+git0.471a1b2f1/VERSION 2024-06-10 16:15:30.000000000 +0200
+++ new/haproxy-3.0.2+git0.a45a8e623/VERSION 2024-06-14 15:00:35.000000000 +0200
@@ -1 +1 @@
-3.0.1
+3.0.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.0.1+git0.471a1b2f1/doc/configuration.txt new/haproxy-3.0.2+git0.a45a8e623/doc/configuration.txt
--- old/haproxy-3.0.1+git0.471a1b2f1/doc/configuration.txt 2024-06-10 16:15:30.000000000 +0200
+++ new/haproxy-3.0.2+git0.a45a8e623/doc/configuration.txt 2024-06-14 15:00:35.000000000 +0200
@@ -3,7 +3,7 @@
Configuration Manual
----------------------
version 3.0
- 2024/06/10
+ 2024/06/14
This document covers the configuration language as implemented in the version
@@ -5190,7 +5190,6 @@
fullconn X - X X
guid - X X X
hash-balance-factor X - X X
-hash-key X - X X
hash-type X - X X
http-after-response X (!) X X X
http-check comment X - X X
@@ -6954,11 +6953,18 @@
guid <string>
- Specify a case-sensitive global unique ID for this proxy. This must be unique
- across all haproxy configuration on every object types. Format is left
- unspecified to allow the user to select its naming policy. The only
- restriction is its length which cannot be greater than 127 characters. All
- alphanumerical values and '.', ':', '-' and '_' characters are valid.
+ Specify a case-sensitive global unique ID for this proxy.
+
+ May be used in the following contexts: tcp, http, log
+
+ May be used in sections : defaults | frontend | listen | backend
+ no | yes | yes | yes
+
+ <string> must be unique across all haproxy configuration on every object
+ types. Format is left unspecified to allow the user to select its naming
+ policy. The only restriction is its length which cannot be greater than
+ 127 characters. All alphanumerical values and '.', ':', '-' and '_'
+ characters are valid.
hash-balance-factor <factor>
@@ -6994,29 +7000,6 @@
See also : "balance" and "hash-type".
-hash-key <key>
- Specify how "hash-type consistent" node keys are computed
-
- Arguments :
- <key> <key> may be one of the following :
-
- id The node keys will be derived from the server's numeric
- identifier as set from "id" or which defaults to its position
- in the server list.
-
- addr The node keys will be derived from the server's address, when
- available, or else fall back on "id".
-
- addr-port The node keys will be derived from the server's address and
- port, when available, or else fall back on "id".
-
- The "addr" and "addr-port" options may be useful in scenarios where multiple
- HAProxy processes are balancing traffic to the same set of servers. If the
- server order of each process is different (because, for example, DNS records
- were resolved in different orders) then this will allow each independent
- HAProxy processes to agree on routing decisions.
-
-
hash-type <method> <function> <modifier>
Specify a method to use for mapping hashes to servers
@@ -17174,10 +17157,36 @@
"ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
guid <string>
+ May be used in the following contexts: tcp, http, log
+
Specify a case-sensitive global unique ID for this server. This must be
unique across all haproxy configuration on every object types. See "guid"
proxy keyword description for more information on its format.
+hash-key <key>
+ May be used in the following contexts: tcp, http, log
+
+ Specify how "hash-type consistent" node keys are computed
+
+ Arguments :
+ <key> <key> may be one of the following :
+
+ id The node keys will be derived from the server's numeric
+ identifier as set from "id" or which defaults to its position
+ in the server list.
+
+ addr The node keys will be derived from the server's address, when
+ available, or else fall back on "id".
+
+ addr-port The node keys will be derived from the server's address and
+ port, when available, or else fall back on "id".
+
+ The "addr" and "addr-port" options may be useful in scenarios where multiple
+ HAProxy processes are balancing traffic to the same set of servers. If the
+ server order of each process is different (because, for example, DNS records
+ were resolved in different orders) then this will allow each independent
+ HAProxy processes to agree on routing decisions.
+
id <value>
May be used in the following contexts: tcp, http, log
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.0.1+git0.471a1b2f1/doc/management.txt new/haproxy-3.0.2+git0.a45a8e623/doc/management.txt
--- old/haproxy-3.0.1+git0.471a1b2f1/doc/management.txt 2024-06-10 16:15:30.000000000 +0200
+++ new/haproxy-3.0.2+git0.a45a8e623/doc/management.txt 2024-06-14 15:00:35.000000000 +0200
@@ -360,6 +360,11 @@
the byte's value to -dM but using this option allows to disable/enable
use of a previously set value.
+ -dR : disable SO_REUSEPORT socket option on listening ports. It is equivalent
+ to the "global" section's "noreuseport" keyword. This may be applied in
+ multi-threading scenarios, when load distribution issues observed among the
+ haproxy threads (could be monitored with top).
+
-dS : disable use of the splice() system call. It is equivalent to the
"global" section's "nosplice" keyword. This may be used when splice() is
suspected to behave improperly or to cause performance issues, or when
@@ -381,6 +386,12 @@
in checked configurations to fail. This is equivalent to global option
"zero-warning".
+ -dZ : disable forwarding of data in "zero-copy" mode. It is equivalent to the
+ "global" section's "tune.disable-zero-copy-forwarding" keyword. This may be
+ helpful in case of issues with data loss or data integrity, or when using
+ strace to see the forwarded data, as it also disables any kernel tcp
+ splicing.
+
-db : disable background mode and multi-process mode. The process remains in
foreground. It is mainly used during development or during small tests, as
Ctrl-C is enough to stop the process. Never use it in an init script.
@@ -419,6 +430,12 @@
level name, the list of available keywords is presented. For example it can
be convenient to pass 'help' for each field to consult the list first.
+ -dv : disable the use of the "evports" poller. It is equivalent to the
+ "global" section's keyword "noevports". It is mostly useful when suspecting
+ a bug related to this poller. On systems supporting event ports (SunOS
+ derived from Solaris 10 and later), the fallback will generally be the
+ "poll" poller.
+
-m <limit> : limit allocatable memory, which is used to keep process's data,
to <limit> megabytes. This may cause some connection refusals or some
slowdowns depending on the amount of memory needed for normal operations.
@@ -3247,8 +3264,8 @@
is meant to be interpreted while checking function strm_dump_to_buffer() in
src/stream.c to figure the exact meaning of certain fields.
-show stat [domain <dns|proxy>] [{<iid>|<proxy>} <type> <sid>] [typed|json] \
- [desc] [up|no-maint]
+show stat [domain <resolvers|proxy>] [{<iid>|<proxy>} <type> <sid>] \
+ [typed|json] [desc] [up|no-maint]
Dump statistics. The domain is used to select which statistics to print; dns
and proxy are available for now. By default, the CSV format is used; you can
activate the extended typed output format described in the section above if
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.0.1+git0.471a1b2f1/src/log.c new/haproxy-3.0.2+git0.a45a8e623/src/log.c
--- old/haproxy-3.0.1+git0.471a1b2f1/src/log.c 2024-06-10 16:15:30.000000000 +0200
+++ new/haproxy-3.0.2+git0.a45a8e623/src/log.c 2024-06-14 15:00:35.000000000 +0200
@@ -870,15 +870,17 @@
if (!ret)
goto fail;
- if (!(curproxy->flags & PR_FL_CHECKED)) {
+ if (!(curproxy->cap & PR_CAP_DEF) &&
+ !(curproxy->flags & PR_FL_CHECKED)) {
/* add the lf_expr to the proxy checks to delay postparsing
* since config-related proxy properties are not stable yet
*/
LIST_APPEND(&curproxy->conf.lf_checks, &lf_expr->list);
}
else {
- /* probably called during runtime or with proxy already checked,
- * perform the postcheck right away
+ /* default proxy, or regular proxy and probably called during
+ * runtime or with proxy already checked, perform the postcheck
+ * right away
*/
if (!lf_expr_postcheck(lf_expr, curproxy, err))
goto fail;
@@ -948,11 +950,17 @@
* compatible with logformat expression, but once the proxy is checked, we fail
* as soon as we face incompatibilities)
*
+ * If the proxy is a default section, then allow the postcheck to succeed:
+ * the logformat expression may or may not work properly depending on the
+ * actual proxy that effectively runs it during runtime, but we have to stay
+ * permissive since we cannot assume it won't work.
+ *
* It returns 1 on success and 0 on error, <err> will be set in case of error.
*/
int lf_expr_postcheck(struct lf_expr *lf_expr, struct proxy *px, char **err)
{
struct logformat_node *lf;
+ int default_px = (px->cap & PR_CAP_DEF);
if (!(px->flags & PR_FL_CHECKED))
px->to_log |= LW_INIT;
@@ -987,7 +995,8 @@
px->to_log |= LW_REQ;
}
else if (lf->type == LOG_FMT_ALIAS) {
- if (lf->alias->mode == PR_MODE_HTTP && px->mode != PR_MODE_HTTP) {
+ if (lf->alias->mode == PR_MODE_HTTP &&
+ !default_px && px->mode != PR_MODE_HTTP) {
memprintf(err, "format alias '%s' is reserved for HTTP mode",
lf->alias->name);
goto fail;
@@ -1006,7 +1015,7 @@
if (!lf_expr_postcheck_node_opt(lf_expr, lf, err))
goto fail;
}
- if ((px->to_log & (LW_REQ | LW_RESP)) &&
+ if (!default_px && (px->to_log & (LW_REQ | LW_RESP)) &&
(px->mode != PR_MODE_HTTP && !(px->options & PR_O_HTTP_UPG))) {
memprintf(err, "logformat expression not usable here (at least one node depends on HTTP mode)");
goto fail;
@@ -1199,7 +1208,7 @@
free_stick_rules(&be->sticking_rules);
}
if (isttest(be->server_id_hdr_name)) {
- ha_warning("Cannot set \"server_id_hdr_name\" with 'mode log' in %s '%s'. It will be ignored.\n",
+ ha_warning("Cannot set \"http-send-name-header\" with 'mode log' in %s '%s'. It will be ignored.\n",
proxy_type_str(be), be->id);
err_code |= ERR_WARN;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.0.1+git0.471a1b2f1/src/mux_h1.c new/haproxy-3.0.2+git0.a45a8e623/src/mux_h1.c
--- old/haproxy-3.0.1+git0.471a1b2f1/src/mux_h1.c 2024-06-10 16:15:30.000000000 +0200
+++ new/haproxy-3.0.2+git0.a45a8e623/src/mux_h1.c 2024-06-14 15:00:35.000000000 +0200
@@ -1018,9 +1018,10 @@
/* Really detach the H1S. Most of time of it called from h1_detach() when the
* stream is detached from the connection. But if the request message must be
- * drained first, the detach is deferred.
+ * drained first, the detach is deferred. Returns 0 if the h1s is detached but
+ * h1c is still usable. -1 is returned if h1s was released.
*/
-static void h1s_finish_detach(struct h1s *h1s)
+static int h1s_finish_detach(struct h1s *h1s)
{
struct h1c *h1c;
struct session *sess;
@@ -1063,7 +1064,7 @@
if (!session_add_conn(sess, h1c->conn, h1c->conn->target)) {
h1c->conn->owner = NULL;
h1c->conn->mux->destroy(h1c);
- goto end;
+ goto released;
}
/* Always idle at this step */
@@ -1074,7 +1075,7 @@
if (session_check_idle_conn(sess, h1c->conn)) {
/* The connection got destroyed, let's leave */
TRACE_DEVEL("outgoing connection killed", H1_EV_STRM_END|H1_EV_H1C_END);
- goto end;
+ goto released;
}
}
else {
@@ -1092,13 +1093,13 @@
/* The server doesn't want it, let's kill the connection right away */
h1c->conn->mux->destroy(h1c);
TRACE_DEVEL("outgoing connection killed", H1_EV_STRM_END|H1_EV_H1C_END);
- goto end;
+ goto released;
}
/* At this point, the connection has been added to the
* server idle list, so another thread may already have
* hijacked it, so we can't do anything with it.
*/
- return;
+ goto end;
}
}
@@ -1110,6 +1111,7 @@
!h1c->conn->owner) {
TRACE_DEVEL("killing dead connection", H1_EV_STRM_END, h1c->conn);
h1_release(h1c);
+ goto released;
}
else {
if (h1c->state == H1_CS_IDLE) {
@@ -1117,8 +1119,10 @@
* subscribe for reads waiting for new data
*/
if (unlikely(b_data(&h1c->ibuf))) {
- if (h1_process(h1c) == -1)
- goto end;
+ if (h1_process(h1c) == -1) {
+ /* h1c was released, don't reuse it anymore */
+ goto released;
+ }
}
else
h1c->conn->xprt->subscribe(h1c->conn, h1c->conn->xprt_ctx, SUB_RETRY_RECV, &h1c->wait_event);
@@ -1128,6 +1132,11 @@
}
end:
TRACE_LEAVE(H1_EV_STRM_END);
+ return 0;
+
+ released:
+ TRACE_DEVEL("leaving after releasing the connection", H1_EV_STRM_END);
+ return -1;
}
@@ -4017,8 +4026,8 @@
h1_shutw_conn(conn);
goto release;
}
- h1s_finish_detach(h1c->h1s);
- goto end;
+ if (h1s_finish_detach(h1c->h1s) == -1)
+ goto released;
}
}
@@ -4088,6 +4097,7 @@
h1_release(h1c);
TRACE_DEVEL("leaving after releasing the connection", H1_EV_H1C_WAKE);
}
+ released:
return -1;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.0.1+git0.471a1b2f1/src/proxy.c new/haproxy-3.0.2+git0.a45a8e623/src/proxy.c
--- old/haproxy-3.0.1+git0.471a1b2f1/src/proxy.c 2024-06-10 16:15:30.000000000 +0200
+++ new/haproxy-3.0.2+git0.a45a8e623/src/proxy.c 2024-06-14 15:00:35.000000000 +0200
@@ -191,6 +191,72 @@
}
}
+/* Frees proxy members that are common to all proxy types (either regular or
+ * default ones) for a proxy that's about to be destroyed.
+ * This is a subset of the complete proxy or default proxy deinit code.
+ */
+static inline void proxy_free_common(struct proxy *px)
+{
+ struct acl *acl, *aclb;
+ struct logger *log, *logb;
+ struct lf_expr *lf, *lfb;
+
+ ha_free(&px->id);
+ ha_free(&px->conf.file);
+ ha_free(&px->check_command);
+ ha_free(&px->check_path);
+ ha_free(&px->cookie_name);
+ ha_free(&px->rdp_cookie_name);
+ ha_free(&px->dyncookie_key);
+ ha_free(&px->cookie_domain);
+ ha_free(&px->cookie_attrs);
+ ha_free(&px->lbprm.arg_str);
+ ha_free(&px->capture_name);
+ istfree(&px->monitor_uri);
+ ha_free(&px->conn_src.iface_name);
+#if defined(CONFIG_HAP_TRANSPARENT)
+ ha_free(&px->conn_src.bind_hdr_name);
+#endif
+ istfree(&px->server_id_hdr_name);
+ istfree(&px->header_unique_id);
+
+ http_ext_clean(px);
+
+ list_for_each_entry_safe(acl, aclb, &px->acl, list) {
+ LIST_DELETE(&acl->list);
+ prune_acl(acl);
+ free(acl);
+ }
+
+ free_act_rules(&px->tcp_req.inspect_rules);
+ free_act_rules(&px->tcp_rep.inspect_rules);
+ free_act_rules(&px->tcp_req.l4_rules);
+ free_act_rules(&px->tcp_req.l5_rules);
+ free_act_rules(&px->http_req_rules);
+ free_act_rules(&px->http_res_rules);
+ free_act_rules(&px->http_after_res_rules);
+
+ lf_expr_deinit(&px->logformat);
+ lf_expr_deinit(&px->logformat_sd);
+ lf_expr_deinit(&px->logformat_error);
+ lf_expr_deinit(&px->format_unique_id);
+
+ list_for_each_entry_safe(log, logb, &px->loggers, list) {
+ LIST_DEL_INIT(&log->list);
+ free_logger(log);
+ }
+
+ /* ensure that remaining lf_expr that were not postchecked (ie: disabled
+ * proxy) don't keep a reference on the proxy which is about to be freed.
+ */
+ list_for_each_entry_safe(lf, lfb, &px->conf.lf_checks, list)
+ LIST_DEL_INIT(&lf->list);
+
+ chunk_destroy(&px->log_tag);
+
+ free_email_alert(px);
+}
+
void free_proxy(struct proxy *p)
{
struct server *s;
@@ -198,33 +264,21 @@
struct listener *l,*l_next;
struct bind_conf *bind_conf, *bind_back;
struct acl_cond *cond, *condb;
- struct acl *acl, *aclb;
struct switching_rule *rule, *ruleb;
struct redirect_rule *rdr, *rdrb;
- struct logger *log, *logb;
struct proxy_deinit_fct *pxdf;
struct server_deinit_fct *srvdf;
if (!p)
return;
- free(p->conf.file);
- free(p->id);
- free(p->cookie_name);
- free(p->cookie_domain);
- free(p->cookie_attrs);
- free(p->lbprm.arg_str);
+ proxy_free_common(p);
+
+ /* regular proxy specific cleanup */
release_sample_expr(p->lbprm.expr);
free(p->server_state_file_name);
- free(p->capture_name);
- istfree(&p->monitor_uri);
- free(p->rdp_cookie_name);
free(p->invalid_rep);
free(p->invalid_req);
-#if defined(CONFIG_HAP_TRANSPARENT)
- free(p->conn_src.bind_hdr_name);
-#endif
- istfree(&p->header_unique_id);
if ((p->lbprm.algo & BE_LB_LKUP) == BE_LB_LKUP_MAP)
free(p->lbprm.map.srv);
@@ -238,12 +292,6 @@
EXTRA_COUNTERS_FREE(p->extra_counters_fe);
EXTRA_COUNTERS_FREE(p->extra_counters_be);
- list_for_each_entry_safe(acl, aclb, &p->acl, list) {
- LIST_DELETE(&acl->list);
- prune_acl(acl);
- free(acl);
- }
-
free_server_rules(&p->server_rules);
list_for_each_entry_safe(rule, ruleb, &p->switching_rules, list) {
@@ -260,24 +308,6 @@
http_free_redirect_rule(rdr);
}
- list_for_each_entry_safe(log, logb, &p->loggers, list) {
- LIST_DEL_INIT(&log->list);
- free_logger(log);
- }
-
- lf_expr_deinit(&p->logformat);
- lf_expr_deinit(&p->logformat_sd);
- lf_expr_deinit(&p->format_unique_id);
- lf_expr_deinit(&p->logformat_error);
-
- free_act_rules(&p->tcp_req.inspect_rules);
- free_act_rules(&p->tcp_rep.inspect_rules);
- free_act_rules(&p->tcp_req.l4_rules);
- free_act_rules(&p->tcp_req.l5_rules);
- free_act_rules(&p->http_req_rules);
- free_act_rules(&p->http_res_rules);
- free_act_rules(&p->http_after_res_rules);
-
free_stick_rules(&p->storersp_rules);
free_stick_rules(&p->sticking_rules);
@@ -348,8 +378,6 @@
free(p->desc);
- http_ext_clean(p);
-
task_destroy(p->task);
pool_destroy(p->req_cap_pool);
@@ -1421,49 +1449,19 @@
}
/* Frees all dynamic settings allocated on a default proxy that's about to be
- * destroyed. This is a subset of the complete proxy deinit code, but these
- * should probably be merged ultimately. Note that most of the fields are not
- * even reset, so extreme care is required here, and calling
- * proxy_preset_defaults() afterwards would be safer.
+ * destroyed. Note that most of the fields are not even reset, so extreme care
+ * is required here, and calling proxy_preset_defaults() afterwards would be
+ * safer.
*/
void proxy_free_defaults(struct proxy *defproxy)
{
- struct acl *acl, *aclb;
- struct logger *log, *logb;
struct cap_hdr *h,*h_next;
- ha_free(&defproxy->id);
- ha_free(&defproxy->conf.file);
+ proxy_free_common(defproxy);
+
+ /* default proxy specific cleanup */
ha_free((char **)&defproxy->defsrv.conf.file);
- ha_free(&defproxy->check_command);
- ha_free(&defproxy->check_path);
- ha_free(&defproxy->cookie_name);
- ha_free(&defproxy->rdp_cookie_name);
- ha_free(&defproxy->dyncookie_key);
- ha_free(&defproxy->cookie_domain);
- ha_free(&defproxy->cookie_attrs);
- ha_free(&defproxy->lbprm.arg_str);
- ha_free(&defproxy->capture_name);
- istfree(&defproxy->monitor_uri);
ha_free(&defproxy->defbe.name);
- ha_free(&defproxy->conn_src.iface_name);
- istfree(&defproxy->server_id_hdr_name);
-
- http_ext_clean(defproxy);
-
- list_for_each_entry_safe(acl, aclb, &defproxy->acl, list) {
- LIST_DELETE(&acl->list);
- prune_acl(acl);
- free(acl);
- }
-
- free_act_rules(&defproxy->tcp_req.inspect_rules);
- free_act_rules(&defproxy->tcp_rep.inspect_rules);
- free_act_rules(&defproxy->tcp_req.l4_rules);
- free_act_rules(&defproxy->tcp_req.l5_rules);
- free_act_rules(&defproxy->http_req_rules);
- free_act_rules(&defproxy->http_res_rules);
- free_act_rules(&defproxy->http_after_res_rules);
h = defproxy->req_cap;
while (h) {
@@ -1483,19 +1481,6 @@
h = h_next;
}
- lf_expr_deinit(&defproxy->logformat);
- lf_expr_deinit(&defproxy->logformat_sd);
- lf_expr_deinit(&defproxy->logformat_error);
- lf_expr_deinit(&defproxy->format_unique_id);
-
- list_for_each_entry_safe(log, logb, &defproxy->loggers, list) {
- LIST_DEL_INIT(&log->list);
- free_logger(log);
- }
-
- chunk_destroy(&defproxy->log_tag);
-
- free_email_alert(defproxy);
proxy_release_conf_errors(defproxy);
deinit_proxy_tcpcheck(defproxy);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.0.1+git0.471a1b2f1/src/quic_tx.c new/haproxy-3.0.2+git0.a45a8e623/src/quic_tx.c
--- old/haproxy-3.0.1+git0.471a1b2f1/src/quic_tx.c 2024-06-10 16:15:30.000000000 +0200
+++ new/haproxy-3.0.2+git0.a45a8e623/src/quic_tx.c 2024-06-14 15:00:35.000000000 +0200
@@ -155,16 +155,27 @@
const size_t hdlen = sizeof(uint16_t) + sizeof(void *);
BUG_ON_HOT(b_contig_space(buf) < hdlen); /* this must not happen */
+ /* If first packet is INITIAL, ensure datagram is sufficiently padded. */
+ BUG_ON(first_pkt->type == QUIC_PACKET_TYPE_INITIAL &&
+ (first_pkt->flags & QUIC_FL_TX_PACKET_ACK_ELICITING) &&
+ length < QUIC_INITIAL_PACKET_MINLEN);
+
write_u16(b_tail(buf), length);
write_ptr(b_tail(buf) + sizeof(length), first_pkt);
b_add(buf, hdlen + length);
}
-/* Returns 1 if a packet may be built for <qc> from <qel> encryption level
- * with <frms> as ack-eliciting frame list to send, 0 if not.
- * <cc> must equal to 1 if an immediate close was asked, 0 if not.
- * <probe> must equalt to 1 if a probing packet is required, 0 if not.
- * Also set <*must_ack> to inform the caller if an acknowledgement should be sent.
+/* Reports if data are ready to be sent for <qel> encryption level on <qc>
+ * connection.
+ *
+ * <frms> is the ack-eliciting frames list to send, if any. Other parameters
+ * can be set individually for some special frame types : <cc> for immediate
+ * close, <probe> to emit probing frames.
+ *
+ * This function will also set <must_ack> to inform the caller that an
+ * acknowledgement should be sent.
+ *
+ * Returns true if data to emit else false.
*/
static int qc_may_build_pkt(struct quic_conn *qc, struct list *frms,
struct quic_enc_level *qel, int cc, int probe,
@@ -330,15 +341,7 @@
for (pkt = first_pkt; pkt; pkt = next_pkt) {
struct quic_cc *cc = &qc->path->cc;
- /* RFC 9000 14.1 Initial datagram size
- * a server MUST expand the payload of all UDP datagrams carrying ack-eliciting
- * Initial packets to at least the smallest allowed maximum datagram size of
- * 1200 bytes.
- */
qc->cntrs.sent_pkt++;
- BUG_ON_HOT(pkt->type == QUIC_PACKET_TYPE_INITIAL &&
- (pkt->flags & QUIC_FL_TX_PACKET_ACK_ELICITING) &&
- dglen < QUIC_INITIAL_PACKET_MINLEN);
pkt->time_sent = time_sent;
if (pkt->flags & QUIC_FL_TX_PACKET_ACK_ELICITING) {
@@ -510,7 +513,7 @@
list_for_each_entry_safe(qel, tmp_qel, qels, el_send) {
struct quic_tls_ctx *tls_ctx;
const struct quic_version *ver;
- struct list *frms = qel->send_frms, *next_frms;
+ struct list *frms = qel->send_frms;
struct quic_enc_level *next_qel;
if (qel == qc->eel) {
@@ -521,14 +524,9 @@
qc_select_tls_ver(qc, qel, &tls_ctx, &ver);
/* Retrieve next QEL. Set it to NULL if on qels last element. */
- if (qel->el_send.n != qels) {
- next_qel = LIST_ELEM(qel->el_send.n, struct quic_enc_level *, el_send);
- next_frms = next_qel->send_frms;
- }
- else {
- next_qel = NULL;
- next_frms = NULL;
- }
+ next_qel = LIST_NEXT(&qel->el_send, struct quic_enc_level *, el_send);
+ if (&next_qel->el_send == qels)
+ next_qel = NULL;
/* Build as much as datagrams at <qel> encryption level.
* Each datagram is prepended with its length followed by the address
@@ -546,7 +544,9 @@
if (!cc)
probe = qel->pktns->tx.pto_probe;
- if (!qc_may_build_pkt(qc, frms, qel, cc, probe, &must_ack)) {
+ /* Remove QEL if nothing to send anymore. Padding is only emitted for last QEL. */
+ if (!qc_may_build_pkt(qc, frms, qel, cc, probe, &must_ack) &&
+ (!padding || next_qel)) {
/* Remove qel from send_list if nothing to send. */
LIST_DEL_INIT(&qel->el_send);
qel->send_frms = NULL;
@@ -577,30 +577,28 @@
}
/* RFC 9000 14.1 Initial datagram size
- * a server MUST expand the payload of all UDP datagrams carrying ack-eliciting
- * Initial packets to at least the smallest allowed maximum datagram size of
- * 1200 bytes.
*
- * Ensure that no ack-eliciting packets are sent into too small datagrams
+ * Similarly, a server MUST expand the payload of all UDP
+ * datagrams carrying ack-eliciting Initial packets to at least the
+ * smallest allowed maximum datagram size of 1200 bytes.
*/
- if (qel == qc->iel && !LIST_ISEMPTY(frms)) {
+ if (qel == qc->iel && (!LIST_ISEMPTY(frms) || probe)) {
+ /* Ensure that no ack-eliciting packets are sent into too small datagrams */
if (end - pos < QUIC_INITIAL_PACKET_MINLEN) {
TRACE_PROTO("No more enough room to build an Initial packet",
QUIC_EV_CONN_PHPKTS, qc);
break;
}
- /* Pad this Initial packet if there is no ack-eliciting frames to send from
- * the next packet number space.
- */
- if (!next_frms || LIST_ISEMPTY(next_frms))
- padding = 1;
+ /* padding will be set for last QEL */
+ padding = 1;
}
pkt_type = quic_enc_level_pkt_type(qc, qel);
cur_pkt = qc_build_pkt(&pos, end, qel, tls_ctx, frms,
qc, ver, dglen, pkt_type,
- must_ack, padding, probe, cc, &err);
+ must_ack, padding && !next_qel,
+ probe, cc, &err);
switch (err) {
case -3:
if (first_pkt)
@@ -628,6 +626,10 @@
total += cur_pkt->len;
dglen += cur_pkt->len;
+ /* Reset padding if datagram is big enough. */
+ if (dglen >= QUIC_INITIAL_PACKET_MINLEN)
+ padding = 0;
+
if (qc->flags & QUIC_FL_CONN_RETRANS_OLD_DATA)
cur_pkt->flags |= QUIC_FL_TX_PACKET_PROBE_WITH_OLD_DATA;
@@ -647,12 +649,7 @@
* the same datagram, except if <qel> is the Application data
* encryption level which cannot be selected to do that.
*/
- if (LIST_ISEMPTY(frms) && qel != qc->ael && next_qel) {
- if (qel == qc->iel &&
- (!qc_is_listener(qc) ||
- cur_pkt->flags & QUIC_FL_TX_PACKET_ACK_ELICITING))
- padding = 1;
-
+ if (LIST_ISEMPTY(frms) && next_qel) {
prv_pkt = cur_pkt;
}
else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.0.1+git0.471a1b2f1/src/resolvers.c new/haproxy-3.0.2+git0.a45a8e623/src/resolvers.c
--- old/haproxy-3.0.1+git0.471a1b2f1/src/resolvers.c 2024-06-10 16:15:30.000000000 +0200
+++ new/haproxy-3.0.2+git0.a45a8e623/src/resolvers.c 2024-06-14 15:00:35.000000000 +0200
@@ -3919,8 +3919,12 @@
static void *rslv_promex_start_ts(void *unused, unsigned int id)
{
- struct resolvers *resolver = LIST_NEXT(&sec_resolvers, struct resolvers *, list);
+ struct resolvers *resolver;
+ if (LIST_ISEMPTY(&sec_resolvers))
+ return NULL;
+
+ resolver = LIST_NEXT(&sec_resolvers, struct resolvers *, list);
return LIST_NEXT(&resolver->nameservers, struct dns_nameserver *, list);
}
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package openshot-qt for openSUSE:Factory checked in at 2024-06-27 16:03:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openshot-qt (Old)
and /work/SRC/openSUSE:Factory/.openshot-qt.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openshot-qt"
Thu Jun 27 16:03:11 2024 rev:7 rq:1183485 version:3.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/openshot-qt/openshot-qt.changes 2024-02-26 19:51:23.778935037 +0100
+++ /work/SRC/openSUSE:Factory/.openshot-qt.new.18349/openshot-qt.changes 2024-06-27 16:04:17.860805417 +0200
@@ -1,0 +2,38 @@
+Tue Jun 25 12:15:48 UTC 2024 - info(a)paolostivanin.com
+
+- Update to version 3.2.0:
+ * Large Theme & User Experience refactor (Added new Retro & Cosmic Dusk theme)
+ * Improved Timeline Snapping and behaviors
+ * New Remove Gap feature (to remove unwanted gaps between clips)
+ * Improved Split Clip and Preview dialog functionality
+ * New Playhead and Marker icons (for all themes)
+ * Support for Blender 4.1, and improved Blender animations
+ * Use friendly name on timeline (i.e. when split clip or updating file names)
+ * Improved Undo / Redo functionality (better transaction support, more stable)
+ * Improved high DPI display support
+ * Improved Tracker / Object Detection effects (more features, more stable)
+ * Improved Parent property (for use with Tracker / Object Detection effects)
+ * Improved Property Editor functionality
+ * Improved font handling in Title editor (for AppImage)
+ * Added new Not Found thumbnail image for missing or corrupt files
+ * Updated scale x and y limits in property dialog (to prevent crashes due to large numbers)
+ * Updated Help Menu Icons with new Discord option
+ * Fixed top Sentry.io & Codacy issues
+ * Fixed many keyboard bindings which did not work
+ * Improvements to AppImage for better compatibility with modern distros
+ * Added Windows Manifest to improve High DPI support on Windows
+ * Moved Save Current Frame to file menu (no more button)
+ * Adding Shear X and Shear Y to Copy menu and Copy All Keyframes menu
+ * Fixed Mac OS notarization errors (build server)
+ * Updated Translations & Supporters
+ * Huge update to User Guide documentation (aimed at improving knowledge for RAG LLM support bot... and humans)
+ * Experimental support for Java bindings added
+ * Adding Effect Sequencing (Before or After keyframes are applied)
+ * Compatibility with FFMPEG 7.0 improved
+ * Improved FFmpegReader audio processing performance
+ * Auto-resize capability added to Crop effect
+ * Removed queuing and spooling in FFmpegWriter to reduce complexity
+ * Fixed race condition in clip parenting
+ * Lots of misc bug fixes
+
+-------------------------------------------------------------------
Old:
----
openshot-qt-3.1.1.obscpio
New:
----
openshot-qt-3.2.0.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openshot-qt.spec ++++++
--- /var/tmp/diff_new_pack.i0GeMC/_old 2024-06-27 16:04:19.664871698 +0200
+++ /var/tmp/diff_new_pack.i0GeMC/_new 2024-06-27 16:04:19.664871698 +0200
@@ -1,7 +1,7 @@
#
# spec file for package openshot-qt
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%define appname org.openshot.OpenShot
Name: openshot-qt
-Version: 3.1.1
+Version: 3.2.0
Release: 0
Summary: Non-linear video editor with broad format support
License: GPL-3.0-or-later
@@ -31,7 +31,7 @@
BuildRequires: hicolor-icon-theme
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
-BuildRequires: python3-openshot >= 0.3.1
+BuildRequires: python3-openshot >= 0.3.3
BuildRequires: python3-pytest
# Check list of dependencies:
BuildRequires: python3-pyxdg
@@ -41,7 +41,7 @@
BuildRequires: python3-setuptools
BuildRequires: shared-mime-info
BuildRequires: update-desktop-files
-Requires: python3-openshot >= 0.3.1
+Requires: python3-openshot >= 0.3.3
Requires: python3-pyxdg
Requires: python3-pyzmq
Requires: python3-qt5
@@ -80,7 +80,7 @@
python3 -B ./src/tests/query_tests.py -platform minimal
%files
-%doc AUTHORS README.md
+%doc README.md
%license COPYING
%dir %{_datadir}/icons/hicolor/*/apps
%dir %{_datadir}/icons/hicolor/*
++++++ _service ++++++
--- /var/tmp/diff_new_pack.i0GeMC/_old 2024-06-27 16:04:19.696872873 +0200
+++ /var/tmp/diff_new_pack.i0GeMC/_new 2024-06-27 16:04:19.700873021 +0200
@@ -2,7 +2,7 @@
<service name="obs_scm" mode="manual">
<param name="url">https://github.com/OpenShot/openshot-qt.git</param>
<param name="scm">git</param>
- <param name="revision">v3.1.1</param>
+ <param name="revision">v3.2.0</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">v(.*)</param>
<param name="changesgenerate">enable</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.i0GeMC/_old 2024-06-27 16:04:19.724873902 +0200
+++ /var/tmp/diff_new_pack.i0GeMC/_new 2024-06-27 16:04:19.732874196 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/OpenShot/openshot-qt.git</param>
- <param name="changesrevision">5416a16b93923d7488d62ae23073e57c8c961e55</param></service></servicedata>
+ <param name="changesrevision">47e8755c71390ba862cfcfdfe9ae109f31718867</param></service></servicedata>
(No newline at EOF)
++++++ openshot-qt-3.1.1.obscpio -> openshot-qt-3.2.0.obscpio ++++++
/work/SRC/openSUSE:Factory/openshot-qt/openshot-qt-3.1.1.obscpio /work/SRC/openSUSE:Factory/.openshot-qt.new.18349/openshot-qt-3.2.0.obscpio differ: char 48, line 1
++++++ openshot-qt-disable-sending-metrics.patch ++++++
--- /var/tmp/diff_new_pack.i0GeMC/_old 2024-06-27 16:04:19.768875519 +0200
+++ /var/tmp/diff_new_pack.i0GeMC/_new 2024-06-27 16:04:19.772875666 +0200
@@ -1,8 +1,8 @@
-Index: openshot-qt-3.0.0/src/settings/_default.settings
+Index: openshot-qt-3.2.0/src/settings/_default.settings
===================================================================
---- openshot-qt-3.0.0.orig/src/settings/_default.settings
-+++ openshot-qt-3.0.0/src/settings/_default.settings
-@@ -385,7 +385,7 @@
+--- openshot-qt-3.2.0.orig/src/settings/_default.settings
++++ openshot-qt-3.2.0/src/settings/_default.settings
+@@ -379,7 +379,7 @@
"restart": true
},
{
++++++ openshot-qt.obsinfo ++++++
--- /var/tmp/diff_new_pack.i0GeMC/_old 2024-06-27 16:04:19.792876400 +0200
+++ /var/tmp/diff_new_pack.i0GeMC/_new 2024-06-27 16:04:19.796876547 +0200
@@ -1,5 +1,5 @@
name: openshot-qt
-version: 3.1.1
-mtime: 1681968435
-commit: 5416a16b93923d7488d62ae23073e57c8c961e55
+version: 3.2.0
+mtime: 1719262198
+commit: 47e8755c71390ba862cfcfdfe9ae109f31718867
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package emacs-jinx for openSUSE:Factory checked in at 2024-06-27 16:03:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/emacs-jinx (Old)
and /work/SRC/openSUSE:Factory/.emacs-jinx.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "emacs-jinx"
Thu Jun 27 16:03:08 2024 rev:5 rq:1183481 version:1.8
Changes:
--------
--- /work/SRC/openSUSE:Factory/emacs-jinx/emacs-jinx.changes 2024-04-14 12:24:48.081958977 +0200
+++ /work/SRC/openSUSE:Factory/.emacs-jinx.new.18349/emacs-jinx.changes 2024-06-27 16:04:10.100520309 +0200
@@ -1,0 +2,12 @@
+Wed Jun 26 19:05:01 UTC 2024 - Björn Bidar <bjorn.bidar(a)thaodan.de>
+
+- Rebase p0001-Only-export-necessary-symbols.-Fixes-105.patch
+ against version 1.8.
+- Update to version 1.8:
+ * Fix wrong-type-argument (Fix #175)
+ * README: Fix grammatical mistake
+ * Ignore message-separator
+ * Add jinx-save-languages
+ * jinx--word-valid-p: Do not error on invalid characters (Fix #93, #164)
+
+-------------------------------------------------------------------
Old:
----
jinx-1.6.tar.gz
New:
----
jinx-1.8.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ emacs-jinx.spec ++++++
--- /var/tmp/diff_new_pack.QsZiQL/_old 2024-06-27 16:04:11.176559842 +0200
+++ /var/tmp/diff_new_pack.QsZiQL/_new 2024-06-27 16:04:11.176559842 +0200
@@ -20,7 +20,7 @@
%global _name jinx
Name: emacs-%{_name}
-Version: 1.6
+Version: 1.8
Release: 0
Summary: Enchanted Spell Checker for Emacs
License: GPL-3.0-or-later
++++++ 0001-Only-export-necessary-symbols.-Fixes-105.patch ++++++
--- /var/tmp/diff_new_pack.QsZiQL/_old 2024-06-27 16:04:11.204560871 +0200
+++ /var/tmp/diff_new_pack.QsZiQL/_new 2024-06-27 16:04:11.208561018 +0200
@@ -16,7 +16,7 @@
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/jinx-mod.c b/jinx-mod.c
-index 0e6a4e66f4f88a7f8d636a1beaddbe957d3f55a2..c999abd7e6b1668ab26585fc00c18511517412e9 100644
+index 4c1c42f6247bba04ff543481a5a0f611559996f3..0a33c48de83ae6c727f5c7253704675e7f0141bb 100644
--- a/jinx-mod.c
+++ b/jinx-mod.c
@@ -21,10 +21,25 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
@@ -46,7 +46,7 @@
static EnchantBroker* broker = 0;
static emacs_value Qt, Qnil, Qcons;
-@@ -171,7 +186,7 @@ static emacs_value jinx_suggest(emacs_env* env, ptrdiff_t jinx_unused(nargs),
+@@ -173,7 +188,7 @@ static emacs_value jinx_suggest(emacs_env* env, ptrdiff_t jinx_unused(nargs),
return list;
}
@@ -56,10 +56,10 @@
return 1; // Require Emacs binary compatibility
emacs_env* env = runtime->get_environment(runtime);
diff --git a/jinx.el b/jinx.el
-index 7bfc8705f9f5bcd35c349ec140a3eb02fa098d93..5accf4a6b4c823b344e46eebb587a58a09751c96 100644
+index f4398973e5db636382a84ee66a329b435e759872..b5bcf95b43759226f3eb8afc3623d20cca6f0c19 100644
--- a/jinx.el
+++ b/jinx.el
-@@ -582,7 +582,7 @@ If CHECK is non-nil, always check first."
+@@ -588,7 +588,7 @@ If CHECK is non-nil, always check first."
(or (locate-library c-name t)
(error "Jinx: %s not found" c-name))))
(command
++++++ jinx-1.6.tar.gz -> jinx-1.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jinx-1.6/CHANGELOG.org new/jinx-1.8/CHANGELOG.org
--- old/jinx-1.6/CHANGELOG.org 2024-04-12 00:07:03.000000000 +0200
+++ new/jinx-1.8/CHANGELOG.org 2024-06-19 12:30:54.000000000 +0200
@@ -2,6 +2,16 @@
#+author: Daniel Mendler
#+language: en
+* Version 1.8 (2024-06-19)
+
+- Bugfix in ~jinx-correct~: Fix ~wrong-type-argument~ error if no Enchant
+ dictionaries are found.
+
+* Version 1.7 (2024-05-15)
+
+- ~jinx--word-valid-p~: Do not error on invalid characters.
+- ~jinx-save-languages~: New custom variable.
+
* Version 1.6 (2024-04-12)
- Bugfix (again): Ensure that directory local variables work correctly with
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jinx-1.6/README.org new/jinx-1.8/README.org
--- old/jinx-1.6/README.org 2024-04-12 00:07:03.000000000 +0200
+++ new/jinx-1.8/README.org 2024-06-19 12:30:54.000000000 +0200
@@ -104,7 +104,7 @@
* Correcting misspellings
-The easiest way to correct a misspellings is to right click on the word,
+The easiest way to correct a misspelling is to right click on the word,
underlined with a wavy line. Then a context menu will open where you can select
from suggestions.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jinx-1.6/jinx-mod.c new/jinx-1.8/jinx-mod.c
--- old/jinx-1.6/jinx-mod.c 2024-04-12 00:07:03.000000000 +0200
+++ new/jinx-1.8/jinx-mod.c 2024-06-19 12:30:54.000000000 +0200
@@ -130,6 +130,8 @@
emacs_value args[], void* jinx_unused(data)) {
EnchantDict* dict = env->get_user_ptr(env, args[0]);
jinx_autofree char* str = jinx_cstr(env, args[1]);
+ // Do not error in the checking function (Non-Unicode strings)
+ env->non_local_exit_clear(env);
return !dict || !str || enchant_dict_check(dict, str, -1) ? Qnil : Qt;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jinx-1.6/jinx.el new/jinx-1.8/jinx.el
--- old/jinx-1.6/jinx.el 2024-04-12 00:07:03.000000000 +0200
+++ new/jinx-1.8/jinx.el 2024-06-19 12:30:54.000000000 +0200
@@ -5,7 +5,7 @@
;; Author: Daniel Mendler <mail(a)daniel-mendler.de>
;; Maintainer: Daniel Mendler <mail(a)daniel-mendler.de>
;; Created: 2023
-;; Version: 1.6
+;; Version: 1.8
;; Package-Requires: ((emacs "27.1") (compat "29.1.4.4"))
;; Homepage: https://github.com/minad/jinx
;; Keywords: convenience, text
@@ -81,6 +81,12 @@
"Dictionary language codes, as a string separated by whitespace."
:type 'string)
+(defcustom jinx-save-languages 'ask
+ "Save the variable `jinx-languages' as file-local variable?"
+ :type '(choice (const :tag "Never" nil)
+ (const :tag "Always" t)
+ (const :tag "Ask" ask)))
+
;;;###autoload
(put 'jinx-languages 'safe-local-variable #'stringp)
@@ -136,11 +142,11 @@
(emacs-lisp-mode
font-lock-constant-face font-lock-warning-face)
(message-mode
- message-header-cc message-header-name message-header-newsgroups
- message-header-other message-header-to message-header-xheader
- message-cited-text-1 message-cited-text-2 message-cited-text-3
- message-cited-text-4 gnus-cite-1 gnus-cite-2 gnus-cite-3
- gnus-cite-4 gnus-cite-5 gnus-cite-6 gnus-cite-7 gnus-cite-8
+ message-separator message-header-cc message-header-name
+ message-header-newsgroups message-header-other message-header-to
+ message-header-xheader message-cited-text-1 message-cited-text-2
+ message-cited-text-3 message-cited-text-4 gnus-cite-1 gnus-cite-2
+ gnus-cite-3 gnus-cite-4 gnus-cite-5 gnus-cite-6 gnus-cite-7 gnus-cite-8
gnus-cite-9 gnus-cite-10 gnus-cite-11))
"Alist of faces per major mode.
These faces mark regions which should be excluded in spell
@@ -732,7 +738,8 @@
(setq list (jinx--add-suggestion list ht w "Suggestions from session")))
(cl-loop for (key . fun) in jinx--save-keys
for actions = (funcall fun nil key word) do
- (unless (consp (car actions)) (setq actions (list actions)))
+ (when (and actions (not (consp (car actions))))
+ (setq actions (list actions)))
(cl-loop for (k w a) in actions do
(push (propertize
(concat (propertize (if (stringp k) k (char-to-string k))
@@ -935,8 +942,10 @@
(t
(setq-local jinx-languages langs)
(when (or (assq 'jinx-languages file-local-variables-alist)
- (and buffer-file-name
- (y-or-n-p "Save `jinx-languages' as file-local variable? ")))
+ (if (eq jinx-save-languages 'ask)
+ (and buffer-file-name
+ (y-or-n-p "Save `jinx-languages' as file-local variable? "))
+ jinx-save-languages))
(add-file-local-variable 'jinx-languages jinx-languages)
(setf (alist-get 'jinx-languages file-local-variables-alist) jinx-languages))))
(jinx--load-dicts)
1
0