From ffa140fab36e2ef2ce8885da2679b50bdcd45ade3d9627f8c66c161b2339665b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= Date: Wed, 19 Nov 2025 20:21:57 +0100 Subject: [PATCH] - Add pass-test_write_read_limited_history.patch: Fix readline history truncation when length is reduced The `readline.set_history_length()` function did not previously truncate the in-memory history when the new length was set to a value smaller than the current number of history items. This could lead to unexpected behavior where `get_history_length()` would still report the old length and writing the history to a file would write more entries than the new limit. This patch modifies `set_history_length()` to explicitly remove the oldest history entries using `remove_history()` when the length is decreased, ensuring the in-memory history is correctly truncated to the new limit. This brings the function's behavior in line with expectations and fixes failures in `test_write_read_limited_history`. --- pass-test_write_read_limited_history.patch | 41 ++++++++++++++++++++++ python312.changes | 21 +++++++++++ python312.spec | 3 ++ 3 files changed, 65 insertions(+) create mode 100644 pass-test_write_read_limited_history.patch diff --git a/pass-test_write_read_limited_history.patch b/pass-test_write_read_limited_history.patch new file mode 100644 index 0000000..7eadf12 --- /dev/null +++ b/pass-test_write_read_limited_history.patch @@ -0,0 +1,41 @@ +Index: Python-3.12.12/Modules/readline.c +=================================================================== +--- Python-3.12.12.orig/Modules/readline.c 2025-11-19 20:17:29.982940492 +0100 ++++ Python-3.12.12/Modules/readline.c 2025-11-19 20:36:46.627307300 +0100 +@@ -145,6 +145,8 @@ + + #define readlinestate_global ((readlinestate *)PyModule_GetState(PyState_FindModule(&readlinemodule))) + ++static int _py_get_history_length(void); ++static void _py_free_history_entry(HIST_ENTRY *entry); + + /* Convert to/from multibyte C strings */ + +@@ -384,6 +386,27 @@ + /*[clinic end generated code: output=e161a53e45987dc7 input=b8901bf16488b760]*/ + { + _history_length = length; ++ ++ if (length < 0) { ++ stifle_history(-1); ++ } ++ else { ++ int current_length = _py_get_history_length(); ++ if (length < current_length) { ++#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500 ++ HISTORY_STATE *state = history_get_history_state(); ++ if (state) { ++ int i; ++ for (i = 0; i < current_length - length; i++) { ++ _py_free_history_entry(remove_history(0)); ++ } ++ state->length = length; ++ free(state); ++ } ++#endif ++ } ++ stifle_history(length); ++ } + Py_RETURN_NONE; + } + diff --git a/python312.changes b/python312.changes index 4158f2b..f43869a 100644 --- a/python312.changes +++ b/python312.changes @@ -1,3 +1,24 @@ +------------------------------------------------------------------- +Wed Nov 19 19:21:41 UTC 2025 - Matej Cepl + +- Add pass-test_write_read_limited_history.patch: + + Fix readline history truncation when length is reduced + + The `readline.set_history_length()` function did not previously + truncate the in-memory history when the new length was set to + a value smaller than the current number of history items. This + could lead to unexpected behavior where `get_history_length()` + would still report the old length and writing the history to a + file would write more entries than the new limit. + + This patch modifies `set_history_length()` to explicitly + remove the oldest history entries using `remove_history()` + when the length is decreased, ensuring the in-memory history + is correctly truncated to the new limit. This brings the + function's behavior in line with expectations and fixes + failures in `test_write_read_limited_history`. + ------------------------------------------------------------------- Thu Nov 13 17:13:03 UTC 2025 - Matej Cepl diff --git a/python312.spec b/python312.spec index 5637dac..da95c0b 100644 --- a/python312.spec +++ b/python312.spec @@ -192,6 +192,9 @@ Patch46: gh139257-Support-docutils-0.22.patch # PATCH-FIX-UPSTREAM CVE-2025-6075-expandvars-perf-degrad.patch bsc#1252974 mcepl@suse.com # Avoid potential quadratic complexity vulnerabilities in path modules Patch47: CVE-2025-6075-expandvars-perf-degrad.patch +# PATCH-FIX-UPSTREAM pass-test_write_read_limited_history.patch bsc#[0-9]+ mcepl@suse.com +# Fix readline history truncation when length is reduced +Patch48: pass-test_write_read_limited_history.patch BuildRequires: autoconf-archive BuildRequires: automake BuildRequires: fdupes