From 76b28e7ff22a5829da275e29e26faac404a107ae Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 17 Apr 2015 11:00:33 -0400 Subject: [PATCH] fix novice-level mistake that causes localedir to point to random, reusable (typically stack) memory --- gtk2_ardour/bundle_env.h | 4 +++- gtk2_ardour/bundle_env_cocoa.cc | 4 ++-- gtk2_ardour/bundle_env_linux.cc | 6 +++--- gtk2_ardour/bundle_env_mingw.cc | 5 +++-- gtk2_ardour/bundle_env_msvc.cc | 4 ++-- gtk2_ardour/main.cc | 10 +++++----- 6 files changed, 18 insertions(+), 15 deletions(-) diff --git a/gtk2_ardour/bundle_env.h b/gtk2_ardour/bundle_env.h index 3a2ca4c54d..95a2696231 100644 --- a/gtk2_ardour/bundle_env.h +++ b/gtk2_ardour/bundle_env.h @@ -20,11 +20,13 @@ #ifndef __gtk2_ardour_bundle_env_h__ #define __gtk2_ardour_bundle_env_h__ +#include + /** This function must do whatever is necessary to create the right runtime * environment for the GTK2 version of ardour, on a per-platform basis. */ -void fixup_bundle_environment (int, char* [], const char** localedir); +void fixup_bundle_environment (int, char* [], std::string & localedir); /** Load any fonts required by the GTK2 version of ardour, on a per-platform * basis. diff --git a/gtk2_ardour/bundle_env_cocoa.cc b/gtk2_ardour/bundle_env_cocoa.cc index 316bc8dce3..1f55b10954 100644 --- a/gtk2_ardour/bundle_env_cocoa.cc +++ b/gtk2_ardour/bundle_env_cocoa.cc @@ -52,7 +52,7 @@ using namespace std; extern void set_language_preference (); // cocoacarbon.mm void -fixup_bundle_environment (int, char* [], const char** localedir) +fixup_bundle_environment (int, char* [], string & localedir) { if (!g_getenv ("ARDOUR_BUNDLED")) { return; @@ -84,7 +84,7 @@ fixup_bundle_environment (int, char* [], const char** localedir) lpath.push_back (bundle_dir); lpath.push_back ("Resources"); lpath.push_back ("locale"); - (*localedir) = strdup (Glib::build_filename (lpath).c_str()); + localedir = strdup (Glib::build_filename (lpath).c_str()); } #endif diff --git a/gtk2_ardour/bundle_env_linux.cc b/gtk2_ardour/bundle_env_linux.cc index 54404b14fb..1766021da1 100644 --- a/gtk2_ardour/bundle_env_linux.cc +++ b/gtk2_ardour/bundle_env_linux.cc @@ -46,7 +46,7 @@ using namespace ARDOUR; using namespace std; void -fixup_bundle_environment (int /*argc*/, char* argv[], const char** localedir) +fixup_bundle_environment (int /*argc*/, char* argv[], string & localedir) { /* THIS IS FOR LINUX - its just about the only place where its * acceptable to build paths directly using '/'. @@ -63,14 +63,14 @@ fixup_bundle_environment (int /*argc*/, char* argv[], const char** localedir) #ifdef ENABLE_NLS if (!ARDOUR::translations_are_enabled ()) { - (*localedir) = "/this/cannot/exist"; + localedir = "/this/cannot/exist"; } else { /* force localedir into the bundle */ vector lpath; lpath.push_back (dir_path); lpath.push_back ("share"); lpath.push_back ("locale"); - (*localedir) = canonical_path (Glib::build_filename (lpath)).c_str(); + localedir = canonical_path (Glib::build_filename (lpath)).c_str(); } #endif diff --git a/gtk2_ardour/bundle_env_mingw.cc b/gtk2_ardour/bundle_env_mingw.cc index 312d56def7..e97bc0bd99 100644 --- a/gtk2_ardour/bundle_env_mingw.cc +++ b/gtk2_ardour/bundle_env_mingw.cc @@ -18,6 +18,7 @@ */ #include +#inc;ude #include "bundle_env.h" #include "i18n.h" @@ -84,7 +85,7 @@ get_install_path () void -fixup_bundle_environment (int, char* [], const char** localedir) +fixup_bundle_environment (int, char* [], string & localedir) { EnvironmentalProtectionAgency::set_global_epa (new EnvironmentalProtectionAgency (true)); /* what to do ? */ @@ -103,7 +104,7 @@ fixup_bundle_environment (int, char* [], const char** localedir) Glib::setenv ("GTK_LOCALEDIR", path, true); // and return the same path to our caller - (*localedir) = strdup (path.c_str()); + localedir = path; } const char *cstr; diff --git a/gtk2_ardour/bundle_env_msvc.cc b/gtk2_ardour/bundle_env_msvc.cc index 08087fa0d1..7189892f5f 100644 --- a/gtk2_ardour/bundle_env_msvc.cc +++ b/gtk2_ardour/bundle_env_msvc.cc @@ -341,7 +341,7 @@ string clearlooks_la_file; } void -fixup_bundle_environment (int argc, char* argv[], const char** localedir) +fixup_bundle_environment (int argc, char* argv[], string & localedir) { std::string exec_path = argv[0]; std::string dir_path = Glib::path_get_dirname (exec_path); @@ -450,7 +450,7 @@ fixup_bundle_environment (int argc, char* argv[], const char** localedir) Glib::setenv ("GTK_LOCALEDIR", path, true); // and return the same path to our caller - (*localedir) = strdup (path.c_str()); + localedir = path; } diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc index 5cf43700f1..abdfa35877 100644 --- a/gtk2_ardour/main.cc +++ b/gtk2_ardour/main.cc @@ -74,7 +74,7 @@ TextReceiver text_receiver ("ardour"); extern int curvetest (string); static ARDOUR_UI *ui = 0; -static const char* localedir = LOCALEDIR; +static string localedir (LOCALEDIR); void gui_jack_error () @@ -253,7 +253,7 @@ int main (int argc, char *argv[]) { ARDOUR::check_for_old_configuration_files(); - fixup_bundle_environment (argc, argv, &localedir); + fixup_bundle_environment (argc, argv, localedir); load_custom_fonts(); /* needs to happen before any gtk and pango init calls */ @@ -277,7 +277,7 @@ int main (int argc, char *argv[]) #ifdef ENABLE_NLS cerr << "bind txt domain [" << PACKAGE << "] to " << localedir << endl; - (void) bindtextdomain (PACKAGE, localedir); + (void) bindtextdomain (PACKAGE, localedir.c_str()); /* our i18n translations are all in UTF-8, so make sure that even if the user locale doesn't specify UTF-8, we use that when handling them. @@ -330,7 +330,7 @@ int main (int argc, char *argv[]) << endl; } - if (!ARDOUR::init (ARDOUR_COMMAND_LINE::use_vst, ARDOUR_COMMAND_LINE::try_hw_optimization, localedir)) { + if (!ARDOUR::init (ARDOUR_COMMAND_LINE::use_vst, ARDOUR_COMMAND_LINE::try_hw_optimization, localedir.c_str())) { error << string_compose (_("could not initialize %1."), PROGRAM_NAME) << endmsg; exit (1); } @@ -346,7 +346,7 @@ int main (int argc, char *argv[]) #endif try { - ui = new ARDOUR_UI (&argc, &argv, localedir); + ui = new ARDOUR_UI (&argc, &argv, localedir.c_str()); } catch (failed_constructor& err) { error << string_compose (_("could not create %1 GUI"), PROGRAM_NAME) << endmsg; exit (1);