From 5e4f93432cffa38c538c6e9d48e6dd7957618896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Tue, 12 Mar 2013 17:01:01 +0100 Subject: [PATCH] Bug #1810: One more dynamic_cast check. This one was safe because the OS attribute must be a vector, it is enforced by VirtualMachine::parse_os --- src/tm/TransferManager.cc | 41 ++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/src/tm/TransferManager.cc b/src/tm/TransferManager.cc index 2dcff9158d..34f3884ae3 100644 --- a/src/tm/TransferManager.cc +++ b/src/tm/TransferManager.cc @@ -509,29 +509,48 @@ void TransferManager::prolog_action(int vid) if ( num > 0 ) { + string kernel; + string initrd; + + bool update = false; + const VectorAttribute * os_attr; os_attr = dynamic_cast(attrs[0]); - string kernel = prolog_os_transfer_commands(vm, - os_attr, - "KERNEL", - opennebula_hostname, - xfr); + if (os_attr != 0 ) + { + kernel = prolog_os_transfer_commands( + vm, + os_attr, + "KERNEL", + opennebula_hostname, + xfr); + + initrd = prolog_os_transfer_commands( + vm, + os_attr, + "initrd", + opennebula_hostname, + xfr); + } + if ( !kernel.empty() ) { vm->set_kernel(kernel); - vmpool->update(vm); + + update = true; } - string initrd = prolog_os_transfer_commands(vm, - os_attr, - "initrd", - opennebula_hostname, - xfr); if ( !initrd.empty() ) { vm->set_initrd(initrd); + + update = true; + } + + if ( update ) + { vmpool->update(vm); } }