From cb57b86c83e0f685b83e218fb0644fb813651813 Mon Sep 17 00:00:00 2001 From: wangqi Date: Tue, 28 Oct 2025 16:19:45 +0800 Subject: [PATCH] fix: resolve file descriptor leak --- 0001-fix-resolve-file-descriptor-leak.patch | 45 +++++++++++++++++++++ deepin-terminal.spec | 8 +++- 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 0001-fix-resolve-file-descriptor-leak.patch diff --git a/0001-fix-resolve-file-descriptor-leak.patch b/0001-fix-resolve-file-descriptor-leak.patch new file mode 100644 index 0000000..0b26803 --- /dev/null +++ b/0001-fix-resolve-file-descriptor-leak.patch @@ -0,0 +1,45 @@ +From 6e2a3ee1b414fafafbe672fcbe65b83222cf68d9 Mon Sep 17 00:00:00 2001 +From: ut004527 +Date: Tue, 28 Oct 2025 16:41:58 +0800 +Subject: [PATCH] fix: resolve file descriptor leak + +--- + 3rdparty/terminalwidget/lib/kptyprocess.cpp | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/3rdparty/terminalwidget/lib/kptyprocess.cpp b/3rdparty/terminalwidget/lib/kptyprocess.cpp +index 5c829fd..c50e307 100644 +--- a/3rdparty/terminalwidget/lib/kptyprocess.cpp ++++ b/3rdparty/terminalwidget/lib/kptyprocess.cpp +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + KPtyProcess::KPtyProcess(QObject *parent) : + KProcess(new KPtyProcessPrivate, parent) +@@ -138,6 +139,21 @@ void KPtyProcess::setupChildProcess() + if (d->ptyChannels & StderrChannel) + dup2(d->pty->slaveFd(), 2); + ++ DIR *dir = opendir("/proc/self/fd"); ++ if (dir) { ++ int dir_fd = dirfd(dir); ++ struct dirent *entry; ++ ++ while ((entry = readdir(dir)) != nullptr) { ++ if (entry->d_name[0] == '.') continue; ++ ++ int fd = atoi(entry->d_name); ++ if (fd > 2 && fd != dir_fd && fd != d->pty->slaveFd()) { ++ ::close(fd); ++ } ++ } ++ closedir(dir); ++ } + KProcess::setupChildProcess(); + } + +-- +2.27.0 diff --git a/deepin-terminal.spec b/deepin-terminal.spec index 0b3ffff..907cebf 100644 --- a/deepin-terminal.spec +++ b/deepin-terminal.spec @@ -1,6 +1,6 @@ -%define specrelease 2%{?dist} +%define specrelease 3%{?dist} %if 0%{?openeuler} -%define specrelease 2 +%define specrelease 3 %endif %define libname libqtermwidget5 @@ -13,6 +13,7 @@ License: GPLv3+ and BSD-3-Clause and Expat and GPLv2+ and LGPLv2+ URL: https://github.com/linuxdeepin/%{name} Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz #Patch0: 0001-fix-qtbase-QLatin1String-QLatin1Char.patch +Patch0: 0001-fix-resolve-file-descriptor-leak.patch Provides: deepin-terminal-data Obsoletes: deepin-terminal-data @@ -132,6 +133,9 @@ ldconfig %{_datadir}/terminalwidget5/translations/*.qm %changelog +* Tue Oct 28 2025 wangqia - 5.9.42-3 +- fix: resolve file descriptor leak + * Tue Oct 14 2025 wangqia - 5.9.42-2 - spec: update license -- Gitee