From 0e6840dfaca63e4cb9fc16aeab2750e8b037b5cf Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Wed, 29 Jan 2014 15:25:15 +0000 Subject: [PATCH] This should fix the yaml-cpp crashes. Issue #94 work. --- src/api/api.cpp | 8 ++++++-- src/backend/network.cpp | 4 +++- src/gui/main.cpp | 20 +++++++++++++++----- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/api/api.cpp b/src/api/api.cpp index dbcddd95..ba4a51c5 100644 --- a/src/api/api.cpp +++ b/src/api/api.cpp @@ -259,7 +259,9 @@ BOSS_API unsigned int boss_load_lists (boss_db db, const char * const masterlist try { if (boost::filesystem::exists(masterlistPath)) { if (boost::algorithm::iends_with(masterlistPath, ".yaml")) { - YAML::Node tempNode = YAML::LoadFile(masterlistPath); + boss::ifstream in(masterlistPath); + YAML::Node tempNode = YAML::Load(in); + in.close(); temp = tempNode["plugins"].as< std::list >(); } else { @@ -280,7 +282,9 @@ BOSS_API unsigned int boss_load_lists (boss_db db, const char * const masterlist if (userlistPath != NULL) { if (boost::filesystem::exists(userlistPath)) { if (boost::algorithm::iends_with(userlistPath, ".yaml")) { - YAML::Node tempNode = YAML::LoadFile(userlistPath); + boss::ifstream in(userlistPath); + YAML::Node tempNode = YAML::Load(in); + in.close(); userTemp = tempNode["plugins"].as< std::list >(); } } diff --git a/src/backend/network.cpp b/src/backend/network.cpp index 8545b0dc..c1b5c884 100644 --- a/src/backend/network.cpp +++ b/src/backend/network.cpp @@ -284,7 +284,9 @@ namespace boss { list messages; list plugins; try { - YAML::Node mlist = YAML::LoadFile(game.MasterlistPath().string()); + boss::ifstream in(game.MasterlistPath()); + YAML::Node mlist = YAML::Load(in); + in.close(); if (mlist["globals"]) messages = mlist["globals"].as< list >(); diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 3ecf3b45..1bffcb8b 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -123,7 +123,9 @@ struct masterlist_updater_parser { BOOST_LOG_TRIVIAL(debug) << "Parsing masterlist..."; try { - YAML::Node mlist = YAML::LoadFile(_game.MasterlistPath().string()); + boss::ifstream in(_game.MasterlistPath()); + YAML::Node mlist = YAML::Load(in); + in.close(); if (mlist["globals"]) _messages = mlist["globals"].as< list >(); @@ -187,7 +189,9 @@ bool BossGUI::OnInit() { } if (fs::exists(g_path_settings)) { try { - _settings = YAML::LoadFile(g_path_settings.string()); + boss::ifstream in(g_path_settings); + _settings = YAML::Load(in); + in.close(); } catch (YAML::ParserException& e) { wxMessageBox( FromUTF8(format(loc::translate("Error: Settings parsing failed. %1%")) % e.what()), @@ -538,7 +542,9 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) { BOOST_LOG_TRIVIAL(debug) << "Parsing userlist at: " << _game.UserlistPath(); try { - YAML::Node ulist = YAML::LoadFile(_game.UserlistPath().string()); + boss::ifstream in(_game.UserlistPath()); + YAML::Node ulist = YAML::Load(in); + in.close(); if (ulist["plugins"]) ulist_plugins = ulist["plugins"].as< list >(); @@ -844,7 +850,9 @@ void Launcher::OnEditMetadata(wxCommandEvent& event) { BOOST_LOG_TRIVIAL(debug) << "Parsing masterlist."; YAML::Node mlist; try { - mlist = YAML::LoadFile(_game.MasterlistPath().string()); + boss::ifstream in(_game.MasterlistPath()); + mlist = YAML::Load(in); + in.close(); } catch (YAML::ParserException& e) { BOOST_LOG_TRIVIAL(error) << "Masterlist parsing failed. " << e.what(); wxMessageBox( @@ -864,7 +872,9 @@ void Launcher::OnEditMetadata(wxCommandEvent& event) { BOOST_LOG_TRIVIAL(debug) << "Parsing userlist."; YAML::Node ulist; try { - ulist = YAML::LoadFile(_game.UserlistPath().string()); + boss::ifstream in(_game.UserlistPath()); + ulist = YAML::Load(in); + in.close(); } catch (YAML::ParserException& e) { BOOST_LOG_TRIVIAL(error) << "Userlist parsing failed. " << e.what(); wxMessageBox(