From 2484016c54f249bf4fc9f40bd3a783b20fbe607f Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Tue, 13 Oct 2015 09:15:06 +0200 Subject: [PATCH] Fix crash in RepositoryUtility::AddObject fixes #10326 --- lib/base/utility.cpp | 4 ++-- lib/base/utility.hpp | 4 ++-- lib/cli/repositoryutility.cpp | 7 +++++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/base/utility.cpp b/lib/base/utility.cpp index c63998d51..a987c3e4b 100644 --- a/lib/base/utility.cpp +++ b/lib/base/utility.cpp @@ -612,13 +612,13 @@ void Utility::MkDir(const String& path, int flags) } } -void Utility::MkDirP(const String& path, int flags) +void Utility::MkDirP(const String& path, int mode) { size_t pos = 0; while (pos != String::NPos) { pos = path.Find("/", pos + 1); - MkDir(path.SubStr(0, pos), flags); + MkDir(path.SubStr(0, pos), mode); } } diff --git a/lib/base/utility.hpp b/lib/base/utility.hpp index e0e51d3af..7366d247a 100644 --- a/lib/base/utility.hpp +++ b/lib/base/utility.hpp @@ -81,8 +81,8 @@ public: static bool Glob(const String& pathSpec, const boost::function& callback, int type = GlobFile | GlobDirectory); static bool GlobRecursive(const String& path, const String& pattern, const boost::function& callback, int type = GlobFile | GlobDirectory); - static void MkDir(const String& path, int flags); - static void MkDirP(const String& path, int flags); + static void MkDir(const String& path, int mode); + static void MkDirP(const String& path, int mode); static bool SetFileOwnership(const String& file, const String& user, const String& group); static void QueueAsyncCallback(const boost::function& callback, SchedulerPolicy policy = DefaultScheduler); diff --git a/lib/cli/repositoryutility.cpp b/lib/cli/repositoryutility.cpp index 8bb68bb03..53acd01fd 100644 --- a/lib/cli/repositoryutility.cpp +++ b/lib/cli/repositoryutility.cpp @@ -232,12 +232,13 @@ bool RepositoryUtility::AddObject(const std::vector& object_paths, const if (check_config) { try { - Object::Ptr object = utype->Instantiate(); + ConfigObject::Ptr object = static_pointer_cast(utype->Instantiate()); Deserialize(object, attrs, false, FAConfig); + object->SetName(name); RepositoryValidationUtils utils; static_pointer_cast(object)->Validate(FAConfig, utils); - } catch (const ScriptError& ex) { + } catch (const ValidationError& ex) { Log(LogCritical, "config", DiagnosticInformation(ex)); return false; } @@ -555,6 +556,8 @@ bool RepositoryUtility::GetChangeLog(const boost::function changelog; String path = GetRepositoryChangeLogPath() + "/"; + Utility::MkDirP(path, 0700); + Utility::Glob(path + "/*.change", boost::bind(&RepositoryUtility::CollectChangeLog, _1, boost::ref(changelog)), GlobFile); -- 2.40.0