diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2019-12-11 08:16:51 +0100 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2019-12-11 09:18:59 +0100 |
commit | b9d6ea1dd7541c4bd866571f9e3f0aa894687c07 (patch) | |
tree | 6b89ca8782cba3f3b3bc54d52bc60a87ea6d036a /extensions | |
parent | c3d5da852584154b5efbce564006e06acbc5f604 (diff) |
Fix crash in report builder after 1efeb17837c22499f00299c033ae59ba3910f7d7
These expressions depend on evaluation order, and when arguments are
constructed from right to left, std::move(xBuilder) has already reset
xBuilder to an empty value prior to xBuilder dereference calling weld_*.
Change-Id: I89f8ab04aeeab684e8f2edd90310515b2256f9fd
Reviewed-on: https://gerrit.libreoffice.org/84912
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/source/propctrlr/propcontroller.cxx | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/extensions/source/propctrlr/propcontroller.cxx b/extensions/source/propctrlr/propcontroller.cxx index faa0ae92354b..885e7efa8574 100644 --- a/extensions/source/propctrlr/propcontroller.cxx +++ b/extensions/source/propctrlr/propcontroller.cxx @@ -732,7 +732,8 @@ namespace pcr { bool bMultiLineTextField = ControlType == PropertyControlType::MultiLineTextField; std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/multiline.ui", m_xContext)); - auto pControl = new OMultilineEditControl(xBuilder->weld_container("multiline"), std::move(xBuilder), + auto pContainer = xBuilder->weld_container("multiline"); + auto pControl = new OMultilineEditControl(std::move(pContainer), std::move(xBuilder), bMultiLineTextField ? eMultiLineText : eStringList, bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; @@ -742,7 +743,8 @@ namespace pcr case PropertyControlType::ListBox: { std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/listbox.ui", m_xContext)); - auto pControl = new OListboxControl(xBuilder->weld_combo_box("listbox"), std::move(xBuilder), bCreateReadOnly); + auto pComboBox = xBuilder->weld_combo_box("listbox"); + auto pControl = new OListboxControl(std::move(pComboBox), std::move(xBuilder), bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; break; @@ -751,7 +753,8 @@ namespace pcr case PropertyControlType::ComboBox: { std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/combobox.ui", m_xContext)); - auto pControl = new OComboboxControl(xBuilder->weld_combo_box("combobox"), std::move(xBuilder), bCreateReadOnly); + auto pComboBox = xBuilder->weld_combo_box("combobox"); + auto pControl = new OComboboxControl(std::move(pComboBox), std::move(xBuilder), bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; break; @@ -762,7 +765,8 @@ namespace pcr { bool bCharacterField = ControlType == PropertyControlType::CharacterField; std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/textfield.ui", m_xContext)); - auto pControl = new OEditControl(xBuilder->weld_entry("textfield"), std::move(xBuilder), bCharacterField, bCreateReadOnly); + auto pEntry = xBuilder->weld_entry("textfield"); + auto pControl = new OEditControl(std::move(pEntry), std::move(xBuilder), bCharacterField, bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; break; @@ -771,7 +775,8 @@ namespace pcr case PropertyControlType::NumericField: { std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/numericfield.ui", m_xContext)); - auto pControl = new ONumericControl(xBuilder->weld_metric_spin_button("numericfield", FieldUnit::NONE), std::move(xBuilder), bCreateReadOnly); + auto pSpinButton = xBuilder->weld_metric_spin_button("numericfield", FieldUnit::NONE); + auto pControl = new ONumericControl(std::move(pSpinButton), std::move(xBuilder), bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; break; @@ -780,7 +785,8 @@ namespace pcr case PropertyControlType::DateTimeField: { std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/datetimefield.ui", m_xContext)); - auto pControl = new ODateTimeControl(xBuilder->weld_container("datetimefield"), std::move(xBuilder), bCreateReadOnly); + auto pContainer = xBuilder->weld_container("datetimefield"); + auto pControl = new ODateTimeControl(std::move(pContainer), std::move(xBuilder), bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; break; @@ -789,7 +795,8 @@ namespace pcr case PropertyControlType::DateField: { std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/datefield.ui", m_xContext)); - auto pControl = new ODateControl(std::make_unique<SvtCalendarBox>(xBuilder->weld_menu_button("datefield")), std::move(xBuilder), bCreateReadOnly); + auto pMenuButton = xBuilder->weld_menu_button("datefield"); + auto pControl = new ODateControl(std::make_unique<SvtCalendarBox>(std::move(pMenuButton)), std::move(xBuilder), bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; break; @@ -798,7 +805,8 @@ namespace pcr case PropertyControlType::TimeField: { std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/timefield.ui", m_xContext)); - auto pControl = new OTimeControl(xBuilder->weld_time_spin_button("timefield", TimeFieldFormat::F_SEC), std::move(xBuilder), bCreateReadOnly); + auto pTimeSpinButton = xBuilder->weld_time_spin_button("timefield", TimeFieldFormat::F_SEC); + auto pControl = new OTimeControl(std::move(pTimeSpinButton), std::move(xBuilder), bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; break; @@ -808,7 +816,8 @@ namespace pcr { weld::Window* pTopLevel = PropertyHandlerHelper::getDialogParentFrame(m_xContext); std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/colorlistbox.ui", m_xContext)); - auto pControl = new OColorControl(std::make_unique<ColorListBox>(xBuilder->weld_menu_button("colorlistbox"), pTopLevel), std::move(xBuilder), bCreateReadOnly); + auto pMenuButton = xBuilder->weld_menu_button("colorlistbox"); + auto pControl = new OColorControl(std::make_unique<ColorListBox>(std::move(pMenuButton), pTopLevel), std::move(xBuilder), bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; break; @@ -817,7 +826,8 @@ namespace pcr case PropertyControlType::HyperlinkField: { std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/hyperlinkfield.ui", m_xContext)); - auto pControl = new OHyperlinkControl(xBuilder->weld_container("hyperlinkfield"), std::move(xBuilder), bCreateReadOnly); + auto pContainer = xBuilder->weld_container("hyperlinkfield"); + auto pControl = new OHyperlinkControl(std::move(pContainer), std::move(xBuilder), bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; break; |