[tor-commits] [tor-browser/tor-browser-45.5.0esr-6.0-1] fixup! Bug #4234: Use the Firefox Update Process for Tor Browser.

gk at torproject.org gk at torproject.org
Wed Nov 9 18:49:08 UTC 2016


commit f0382d95b8145b91bae099024bce64affff34523
Author: Kathy Brade <brade at pearlcrescent.com>
Date:   Wed Nov 9 12:02:00 2016 -0500

    fixup! Bug #4234: Use the Firefox Update Process for Tor Browser.
    
    Modify the AddSymlink implementation to use absolute paths when creating
    symlinks. This fixes a compile error that was introduced due to the changes
    Mozilla made for https://bugzilla.mozilla.org/show_bug.cgi?id=1246972.
---
 toolkit/mozapps/update/updater/updater.cpp | 47 ++++++++++++++++++------------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp
index 9e45698..d6d0f09 100644
--- a/toolkit/mozapps/update/updater/updater.cpp
+++ b/toolkit/mozapps/update/updater/updater.cpp
@@ -1986,9 +1986,7 @@ PatchIfFile::Finish(int status)
 class AddSymlink : public Action
 {
 public:
-  AddSymlink() : mLinkName(NULL)
-               , mTarget(NULL)
-               , mAdded(false)
+  AddSymlink() : mAdded(false)
             { }
 
   virtual int Parse(NS_tchar *line);
@@ -1997,8 +1995,9 @@ public:
   virtual void Finish(int status);
 
 private:
-  const NS_tchar *mLinkName;
-  const NS_tchar *mTarget;
+  mozilla::UniquePtr<NS_tchar[]> mLinkPath;
+  mozilla::UniquePtr<NS_tchar[]> mRelPath;
+  mozilla::UniquePtr<NS_tchar[]> mTarget;
   bool mAdded;
 };
 
@@ -2007,26 +2006,36 @@ AddSymlink::Parse(NS_tchar *line)
 {
   // format "<linkname>" "target"
 
-  mLinkName = get_valid_path(&line);
-  if (!mLinkName)
+  NS_tchar * validPath = get_valid_path(&line);
+  if (!validPath)
     return PARSE_ERROR;
 
+  mRelPath = mozilla::MakeUnique<NS_tchar[]>(MAXPATHLEN);
+  NS_tstrcpy(mRelPath.get(), validPath);
+  mLinkPath.reset(get_full_path(validPath));
+  if (!mLinkPath) {
+     return PARSE_ERROR;
+  }
+
   // consume whitespace between args
   NS_tchar *q = mstrtok(kQuote, &line);
   if (!q)
     return PARSE_ERROR;
 
-  mTarget = get_valid_path(&line, false, true);
-  if (!mTarget)
+  validPath = get_valid_path(&line, false, true);
+  if (!validPath)
     return PARSE_ERROR;
 
+  mTarget = mozilla::MakeUnique<NS_tchar[]>(MAXPATHLEN);
+  NS_tstrcpy(mTarget.get(), validPath);
+
   return OK;
 }
 
 int
 AddSymlink::Prepare()
 {
-  LOG(("PREPARE ADDSYMLINK " LOG_S " -> " LOG_S, mLinkName, mTarget));
+  LOG(("PREPARE ADDSYMLINK " LOG_S " -> " LOG_S, mRelPath.get(), mTarget.get()));
 
   return OK;
 }
@@ -2034,26 +2043,26 @@ AddSymlink::Prepare()
 int
 AddSymlink::Execute()
 {
-  LOG(("EXECUTE ADDSYMLINK " LOG_S " -> " LOG_S, mLinkName, mTarget));
+  LOG(("EXECUTE ADDSYMLINK " LOG_S " -> " LOG_S, mRelPath.get(), mTarget.get()));
 
   // First make sure that we can actually get rid of any existing file or link.
   struct stat linkInfo;
-  int rv = lstat(mLinkName, &linkInfo);
+  int rv = lstat(mLinkPath.get(), &linkInfo);
   if ((0 == rv) && !S_ISLNK(linkInfo.st_mode)) {
-    rv = NS_taccess(mLinkName, F_OK);
+    rv = NS_taccess(mLinkPath.get(), F_OK);
   }
   if (rv == 0) {
-    rv = backup_create(mLinkName);
+    rv = backup_create(mLinkPath.get());
     if (rv)
       return rv;
   } else {
-    rv = ensure_parent_dir(mLinkName);
+    rv = ensure_parent_dir(mLinkPath.get());
     if (rv)
       return rv;
   }
 
   // Create the link.
-  rv = symlink(mTarget, mLinkName);
+  rv = symlink(mTarget.get(), mLinkPath.get());
   if (!rv) {
     mAdded = true;
   }
@@ -2064,12 +2073,12 @@ AddSymlink::Execute()
 void
 AddSymlink::Finish(int status)
 {
-  LOG(("FINISH ADDSYMLINK " LOG_S " -> " LOG_S, mLinkName, mTarget));
+  LOG(("FINISH ADDSYMLINK " LOG_S " -> " LOG_S, mRelPath.get(), mTarget.get()));
   // When there is an update failure and a link has been added it is removed
   // here since there might not be a backup to replace it.
   if (status && mAdded)
-    NS_tremove(mLinkName);
-  backup_finish(mLinkName, status);
+    NS_tremove(mLinkPath.get());
+  backup_finish(mLinkPath.get(), mRelPath.get(), status);
 }
 #endif
 



More information about the tor-commits mailing list