commit:     388a0ec1751688351781ddfd6175bc4e902356d1
Author:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Sun Apr 25 01:00:45 2021 +0000
Commit:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Sun Apr 25 01:01:30 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=388a0ec1

sys-process/incron: Fix crash when accessing path of..

...created/moved dir in watched directory.

Closes: https://bugs.gentoo.org/785448
Package-Manager: Portage-3.0.18, Repoman-3.0.3
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>

 .../incron/files/incron-0.5.12-issue25.patch       | 40 ++++++++++++++++++++++
 ...14.ebuild => incron-0.5.12_p20191114-r1.ebuild} |  7 ++--
 2 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/sys-process/incron/files/incron-0.5.12-issue25.patch 
b/sys-process/incron/files/incron-0.5.12-issue25.patch
new file mode 100644
index 00000000000..8883aec180a
--- /dev/null
+++ b/sys-process/incron/files/incron-0.5.12-issue25.patch
@@ -0,0 +1,40 @@
+https://bugs.gentoo.org/785448
+
+Origin: https://github.com/ar-/incron/issues/25#issuecomment-583796322
+
+--- old/usertable.cpp
++++ new/usertable.cpp
+@@ -370,20 +370,21 @@ void UserTable::OnEvent(InotifyEvent& rEvt)
+ {
+   InotifyWatch* pW = rEvt.GetWatch();
+   IncronTabEntry* pE = FindEntry(pW);
++  std::string pW_path = pW->GetPath();
+ 
+   // no entry found - this shouldn't occur
+   if (pE == NULL)
+     return;
+ 
+   // discard event if user has no access rights to watch path
+-  if (!(m_fSysTable || MayAccess(pW->GetPath(), DONT_FOLLOW(rEvt.GetMask()))))
++  if (!(m_fSysTable || MayAccess(pW_path, DONT_FOLLOW(rEvt.GetMask()))))
+     return;
+     
+   //#if 0
+   // log output for each dir + file + event
+   std::string events;
+   rEvt.DumpTypes(events);
+-  syslog(LOG_INFO, "PATH (%s) FILE (%s) EVENT (%s)", pW->GetPath().c_str() , 
IncronTabEntry::GetSafePath(rEvt.GetName()).c_str() , events.c_str());
++  syslog(LOG_INFO, "PATH (%s) FILE (%s) EVENT (%s)", pW_path.c_str() , 
IncronTabEntry::GetSafePath(rEvt.GetName()).c_str() , events.c_str());
+   //#endif
+   
+   // add new watch for newly created subdirs
+@@ -422,7 +423,7 @@ void UserTable::OnEvent(InotifyEvent& rEvt)
+       else {
+         cmd.append(cs.substr(oldpos, pos-oldpos));
+         if (cs[px] == '@') {          // base path
+-          cmd.append(IncronTabEntry::GetSafePath(pW->GetPath()));
++          cmd.append(IncronTabEntry::GetSafePath(pW_path));
+           oldpos = pos + 2;
+         }
+         else if (cs[px] == '#') {     // file name
+ 

diff --git a/sys-process/incron/incron-0.5.12_p20191114.ebuild 
b/sys-process/incron/incron-0.5.12_p20191114-r1.ebuild
similarity index 88%
rename from sys-process/incron/incron-0.5.12_p20191114.ebuild
rename to sys-process/incron/incron-0.5.12_p20191114-r1.ebuild
index 28928d33fc2..7e7ab9ba0fb 100644
--- a/sys-process/incron/incron-0.5.12_p20191114.ebuild
+++ b/sys-process/incron/incron-0.5.12_p20191114-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI="7"
@@ -20,7 +20,10 @@ IUSE=""
 DEPEND=""
 RDEPEND=""
 
-PATCHES=( "${FILESDIR}"/${PN}-0.5.12-use-execl-instead-system.patch )
+PATCHES=(
+       "${FILESDIR}"/${PN}-0.5.12-use-execl-instead-system.patch
+       "${FILESDIR}"/${PN}-0.5.12-issue25.patch
+)
 
 # < 2.6.18 => INOTIFY, >= 2.6.18 => INOTIFY_USER
 # It should be ok to expect at least 2.6.18

Reply via email to