From 26a0ef1a27cc36317cd177ab44da1c2feed3ed05 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Sun, 17 Jan 2010 23:27:51 -0600 Subject: [PATCH] Mixer: Fix invalid read in module picker. --- Mixer/Module.C | 28 ++++++++++++++++++---------- Mixer/Plugin_Module.C | 2 +- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/Mixer/Module.C b/Mixer/Module.C index a3dd69a..5342af8 100644 --- a/Mixer/Module.C +++ b/Mixer/Module.C @@ -322,9 +322,9 @@ Module::pick_module ( void ) menu->type( Fl_Menu_Button::POPUP3 ); // menu->add( "JACK", 0, 0, (void*)1 ); - menu->add( "Gain", 0, 0, (void*)2 ); - menu->add( "Meter", 0, 0, (void*)3 ); - menu->add( "Mono Pan", 0, 0, (void*)4 ); + menu->add( "Gain", 0, 0, new unsigned long(-2) ); + menu->add( "Meter", 0, 0, new unsigned long(-3) ); + menu->add( "Mono Pan", 0, 0, new unsigned long(-4) ); Plugin_Module::add_plugins_to_menu( menu ); @@ -338,22 +338,30 @@ Module::pick_module ( void ) if ( ! v ) return NULL; - switch ( (int)v ) + unsigned long id = *((unsigned long *)v); + + switch ( id ) { - case 1: + case -1: return new JACK_Module(); - case 2: + case -2: return new Gain_Module(); - case 3: + case -3: return new Meter_Module(); - case 4: + case -4: return new Mono_Pan_Module(); } - Plugin_Module::Plugin_Info *pi = (Plugin_Module::Plugin_Info*)v; +/* Plugin_Module::Plugin_Info *pi = (Plugin_Module::Plugin_Info*)v; */ Plugin_Module *m = new Plugin_Module(); - m->load( pi->id ); + m->load( id ); + + for ( const Fl_Menu_Item *mi = menu->menu(); mi->label(); ++mi ) + { + if ( mi->user_data() ) + delete mi->user_data(); + } return m; } diff --git a/Mixer/Plugin_Module.C b/Mixer/Plugin_Module.C index eca7418..89cbfc3 100644 --- a/Mixer/Plugin_Module.C +++ b/Mixer/Plugin_Module.C @@ -117,7 +117,7 @@ Plugin_Module::add_plugins_to_menu ( Fl_Menu_Button *menu ) { snprintf( path, sizeof( path ), "%s/%s", "Plugin", pi->path ); - menu->add(path, 0, NULL, pi, 0 ); + menu->add(path, 0, NULL, new unsigned long( pi->id ), 0 ); } delete[] pia;