lftp/backport-fix-second-find_cmd-Segmentation-fault.patch
2022-09-13 16:30:58 +08:00

95 lines
2.6 KiB
Diff

From 0ead378c8a19d4c7b86e35265a7f6e878fd63c0d Mon Sep 17 00:00:00 2001
From: "Alexander V. Lukyanov" <lavv17@gmail.com>
Date: Wed, 20 Apr 2022 23:32:37 +0300
Subject: [PATCH] fix second find_cmd Segmentation fault
Conflict:NA
Reference:https://github.com/lavv17/lftp/commit/0ead378c8a19d4c7b86e35265a7f6e878fd63c0d
---
src/GetFileInfo.cc | 34 +++++++++++++++++++++++-----------
src/GetFileInfo.h | 2 ++
2 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/src/GetFileInfo.cc b/src/GetFileInfo.cc
index 7afb3d8..4d08dfa 100644
--- a/src/GetFileInfo.cc
+++ b/src/GetFileInfo.cc
@@ -114,6 +114,22 @@ void GetFileInfo::PrepareToDie()
}
}
+void GetFileInfo::MakeVerifyFileName()
+{
+ /* Here we should have the home directory path. Find out
+ * the real name of the path. (we may have something like "~..".) */
+
+ FileAccess::Path pwd(session->GetCwd());
+
+ session->SetCwd(origdir);
+ session->Chdir(dir, false);
+
+ verify_fn.set(basename_ptr(session->GetCwd()));
+
+ /* go back */
+ session->SetCwd(pwd);
+}
+
int GetFileInfo::Do()
{
int res;
@@ -241,6 +257,8 @@ int GetFileInfo::Do()
if(!saved_error_text)
saved_error_text.set(session->StrError(res));
session->Close();
+ if(!verify_fn)
+ MakeVerifyFileName();
if(res==FA::NO_FILE)
{
/* If this is a CWD to the parent, and it failed, we
@@ -262,17 +280,7 @@ int GetFileInfo::Do()
/* Now that we've connected, we should have the home directory path. Find out
* the real name of the path. (We may have something like "~/..".) */
if(!verify_fn)
- {
- FileAccess::Path pwd(session->GetCwd());
-
- session->SetCwd(origdir);
- session->Chdir(dir, false);
-
- verify_fn.set(basename_ptr(session->GetCwd()));
-
- /* go back */
- session->SetCwd(pwd);
- }
+ MakeVerifyFileName();
/* Special case: looking up "/". Make a phony entry. */
if(showdir && !strcmp(verify_fn, "/"))
@@ -390,6 +398,10 @@ int GetFileInfo::Do()
* also serves as a last attempt to see if the file exists--we
* only get here if everything else thinks the path doesn't exist.
*/
+
+ /* verify_fn_mabe null. */
+ if(!verify_fn)
+ MakeVerifyFileName();
FileInfo *fi=new FileInfo(verify_fn);
fi->need=need;
/* We need to do at least one. */
diff --git a/src/GetFileInfo.h b/src/GetFileInfo.h
index 1ac8f4d..483dcc3 100644
--- a/src/GetFileInfo.h
+++ b/src/GetFileInfo.h
@@ -66,6 +66,8 @@ class GetFileInfo : public ListInfo
void PrepareToDie();
+ void MakeVerifyFileName();
+
public:
GetFileInfo(const FileAccessRef& a, const char *path, bool showdir);
virtual ~GetFileInfo();
--
2.23.0