summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Mladek <pmladek@suse.cz>2011-01-13 21:13:19 +0100
committerPetr Mladek <pmladek@hopik.site>2011-01-14 19:24:27 +0100
commit2c2774f3a20f35f9f5320efa9e7d1f37bb860266 (patch)
tree2f0e042f4825d213ff93f5f13e5fdad18273d075
parent8539854f9af2c423d69ab9a89c79d3dbb8c6abd3 (diff)
unopkg crasher on SLED11-SP1 (bnc#655912)
activateExtension call broke memory if dp_misc::getIdentifier and xNewExtension were called inline; the problem was visible only with gcc-4.3.4 and did not appear with older or newer gcc versions valgrind got happy and unopkg stopped crashing after the values were passed via the extra variables it looks like a miscompilation; IMHO, it does not make sense to report it because it does not happen with last gcc version this code is not critical for the performance, so the workaround with extra variables is fine; they might even be optimized out by the compiler Signed off by Michael, Noel, Tor
-rw-r--r--desktop/source/deployment/manager/dp_extensionmanager.cxx8
1 files changed, 6 insertions, 2 deletions
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx
index c6529ec0e8..11b38cdc88 100644
--- a/desktop/source/deployment/manager/dp_extensionmanager.cxx
+++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx
@@ -740,9 +740,13 @@ Reference<deploy::XPackage> ExtensionManager::addExtension(
if (repository.equals(OUSTR("user")))
bUserDisabled2 = false;
+ // pass the two values via variables to workaround gcc-4.3.4 specific bug (bnc#655912)
+ OUString sNewExtensionIdentifier = dp_misc::getIdentifier(xNewExtension);
+ OUString sNewExtensionFileName = xNewExtension->getName();
+
activateExtension(
- dp_misc::getIdentifier(xNewExtension),
- xNewExtension->getName(), bUserDisabled2, false, xAbortChannel,
+ sNewExtensionIdentifier, sNewExtensionFileName,
+ bUserDisabled2, false, xAbortChannel,
Reference<ucb::XCommandEnvironment>());
}
else