[Libreoffice-commits] core.git: 2 commits - dbaccess/source vcl/qt5
Michael Weghorn (via logerrit)
logerrit at kemper.freedesktop.org
Fri Sep 24 11:58:06 UTC 2021
dbaccess/source/core/api/RowSet.cxx | 18 ++++++---------
dbaccess/source/core/api/RowSet.hxx | 1
vcl/qt5/Qt5Frame.cxx | 42 +++++++++++++++++++-----------------
3 files changed, 32 insertions(+), 29 deletions(-)
New commits:
commit 84c25d55fe03f693a86816ad11f614bc7d07ed1a
Author: Michael Weghorn <m.weghorn at posteo.de>
AuthorDate: Fri Sep 24 06:39:09 2021 +0200
Commit: Michael Weghorn <m.weghorn at posteo.de>
CommitDate: Fri Sep 24 13:57:39 2021 +0200
qt5: Port Qt5Frame away from deprecated QDesktopWidget
Most of QDesktopWidget's methods were deprecated in
Qt 5.11 and QDesktopWidget was removed in Qt 6.
Since 'QScreen *QGuiApplication::screenAt(const QPoint &point)'
was only introduced in 5.10, keep using
'QDesktopWidget::screenNumber' for older Qt versions.
Change-Id: I915fda0ea00b018945974ad82c1927a5fac99145
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122548
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>
diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx
index 2c2b439be225..43ca9cdbf802 100644
--- a/vcl/qt5/Qt5Frame.cxx
+++ b/vcl/qt5/Qt5Frame.cxx
@@ -45,7 +45,9 @@
#include <QtWidgets/QStyle>
#include <QtWidgets/QToolTip>
#include <QtWidgets/QApplication>
+#if QT_VERSION < QT_VERSION_CHECK(5, 10, 0)
#include <QtWidgets/QDesktopWidget>
+#endif
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QMainWindow>
@@ -482,26 +484,26 @@ Size Qt5Frame::CalcDefaultSize()
if (!m_bFullScreen)
{
const QScreen* pScreen = screen();
- SAL_WNODEPRECATED_DECLARATIONS_PUSH
- aSize = bestmaxFrameSizeForScreenSize(
- toSize(pScreen ? pScreen->size() : QApplication::desktop()->screenGeometry(0).size()));
- SAL_WNODEPRECATED_DECLARATIONS_POP
+ if (!pScreen)
+ pScreen = QGuiApplication::screens().at(0);
+ aSize = bestmaxFrameSizeForScreenSize(toSize(pScreen->size()));
}
else
{
if (!m_bFullScreenSpanAll)
{
- SAL_WNODEPRECATED_DECLARATIONS_PUSH
- aSize = toSize(
- QApplication::desktop()->screenGeometry(maGeometry.nDisplayScreenNumber).size());
- SAL_WNODEPRECATED_DECLARATIONS_POP
+ aSize = toSize(QGuiApplication::screens().at(maGeometry.nDisplayScreenNumber)->size());
}
else
{
- SAL_WNODEPRECATED_DECLARATIONS_PUSH
+#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
+ QScreen* pScreen = QGuiApplication::screenAt(QPoint(0, 0));
+#else
+ // QGuiApplication::screenAt was added in Qt 5.10, use deprecated QDesktopWidget
int nLeftScreen = QApplication::desktop()->screenNumber(QPoint(0, 0));
- SAL_WNODEPRECATED_DECLARATIONS_POP
- aSize = toSize(QApplication::screens()[nLeftScreen]->availableVirtualGeometry().size());
+ QScreen* pScreen = QGuiApplication::screens()[nLeftScreen];
+#endif
+ aSize = toSize(pScreen->availableVirtualGeometry().size());
}
}
@@ -1216,23 +1218,25 @@ void Qt5Frame::SetScreenNumber(unsigned int nScreen)
if (!m_bFullScreenSpanAll)
{
- SAL_WNODEPRECATED_DECLARATIONS_PUSH
- screenGeo = QApplication::desktop()->screenGeometry(nScreen);
- SAL_WNODEPRECATED_DECLARATIONS_POP
+ screenGeo = QGuiApplication::screens().at(nScreen)->geometry();
pWindow->setScreen(QApplication::screens()[nScreen]);
}
else // special case: fullscreen over all available screens
{
assert(m_bFullScreen);
// left-most screen
- SAL_WNODEPRECATED_DECLARATIONS_PUSH
+#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
+ QScreen* pScreen = QGuiApplication::screenAt(QPoint(0, 0));
+#else
+ // QGuiApplication::screenAt was added in Qt 5.10, use deprecated QDesktopWidget
int nLeftScreen = QApplication::desktop()->screenNumber(QPoint(0, 0));
- SAL_WNODEPRECATED_DECLARATIONS_POP
+ QScreen* pScreen = QGuiApplication::screens()[nLeftScreen];
+#endif
// entire virtual desktop
- screenGeo = QApplication::screens()[nLeftScreen]->availableVirtualGeometry();
- pWindow->setScreen(QApplication::screens()[nLeftScreen]);
+ screenGeo = pScreen->availableVirtualGeometry();
+ pWindow->setScreen(pScreen);
pWindow->setGeometry(screenGeo);
- nScreen = nLeftScreen;
+ nScreen = screenNumber(pScreen);
}
// setScreen by itself has no effect, explicitly move the widget to
commit fe040e71343cb894f97a0781f77805fd046178ca
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Sep 24 11:03:34 2021 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri Sep 24 13:57:29 2021 +0200
we just want to append to the caught exception and rethrow it
try and avoid using cppu::throwException due to asan
AddressSanitizer:DEADLYSIGNAL
=================================================================
==571495==ERROR: AddressSanitizer: SEGV on unknown address (pc 0x7f0af1cee04c bp 0x7ffc0fa694f0 sp 0x7ffc0fa69298 T0)
==571495==The signal is caused by a READ memory access.
==571495==Hint: this fault was caused by a dereference of a high value address (see register values below). Disassemble the provided pc to learn which register was used.
#0 0x7f0af1cee04c (<unknown module>)
#1 0xab690cf in dbtools::SQLExceptionInfo::doThrow() connectivity/source/commontools/dbexception.cxx:240:9
#2 0xa5e0a26 in dbaccess::ORowSet::impl_ensureStatement_throw() dbaccess/source/core/api/RowSet.cxx:1661:16
#3 0xa5e0d80 in dbaccess::ORowSet::impl_prepareAndExecute_throw() dbaccess/source/core/api/RowSet.cxx:1667:5
#4 0xa5d33c4 in dbaccess::ORowSet::execute_NoApprove_NoNewConn(osl::ResettableGuard<osl::Mutex>&) dbaccess/source/core/api/RowSet.cxx:1800:45
#5 0xa5d0a10 in dbaccess::ORowSet::execute() dbaccess/source/core/api/RowSet.cxx:1556:5
#6 0x6eae94 in ScDocShell::DBaseImport(rtl::OUString const&, unsigned short, std::__1::map<short, ScColWidthParam, std::__1::less<short>, std::__1::allocator<std::__1::pair<short const, ScColWidthParam> > >&, ScFlatBoolRowSegments&) sc/source/ui/docshell/docsh8.cxx:316:18
#7 0x65ba78 in TestImportDBF sc/source/ui/docshell/docsh.cxx:3448:33
#8 0x627912 in LLVMFuzzerTestOneInput vcl/workben/dbffuzzer.cxx:49:11
#9 0x53fe23 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) cxa_noexception.cpp
#10 0x53f61a in fuzzer::Fuzzer::RunOne(unsigned char const*, unsigned long, bool, fuzzer::InputInfo*, bool, bool*) cxa_noexception.cpp
#11 0x540ccb in fuzzer::Fuzzer::MutateAndTestOne() cxa_noexception.cpp
#12 0x5416f5 in fuzzer::Fuzzer::Loop(std::__Fuzzer::vector<fuzzer::SizedFile, std::__Fuzzer::allocator<fuzzer::SizedFile> >&) cxa_noexception.cpp
#13 0x5325ce in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) cxa_noexception.cpp
#14 0x557582 in main /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerMain.cpp:20:10
#15 0x7f0af28b90b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
seen in oss-fuzz build with
clang version 14.0.0 (https://github.com/llvm/llvm-project.git 0e03450ae4358e8a8242b73d493d96efea9d3ccf)
Change-Id: I0d676e10d7749ab331870b3d763e8f0bbefa18c3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122571
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/dbaccess/source/core/api/RowSet.cxx b/dbaccess/source/core/api/RowSet.cxx
index 79ffe82ea2da..6a5af36e205e 100644
--- a/dbaccess/source/core/api/RowSet.cxx
+++ b/dbaccess/source/core/api/RowSet.cxx
@@ -123,6 +123,7 @@ ORowSet::ORowSet( const Reference< css::uno::XComponentContext >& _rxContext )
,m_aRowsetListeners(*m_pMutex)
,m_aApproveListeners(*m_pMutex)
,m_aRowsChangeListener(*m_pMutex)
+ ,m_sErrorString(ResourceManager::loadString(RID_STR_COMMAND_LEADING_TO_ERROR))
,m_nFetchDirection(FetchDirection::FORWARD)
,m_nFetchSize(50)
,m_nMaxFieldSize(0)
@@ -1644,21 +1645,18 @@ void ORowSet::impl_ensureStatement_throw()
// then the driver doesn't support this feature
}
}
- catch( const SQLException& )
+ catch (SQLException& rException)
{
- SQLExceptionInfo aError( ::cppu::getCaughtException() );
- OSL_ENSURE( aError.isValid(), "ORowSet::impl_makeNewStatement_throw: caught an SQLException which we cannot analyze!" );
+ css::sdbc::SQLException* pLastExceptionInChain = SQLExceptionInfo::getLastException(&rException);
+ assert(pLastExceptionInChain && "will at least be &rException");
// append information about what we were actually going to execute
- try
- {
- OUString sInfo(DBA_RES_PARAM( RID_STR_COMMAND_LEADING_TO_ERROR, "$command$", sCommandToExecute ) );
- aError.append( SQLExceptionInfo::TYPE::SQLContext, sInfo );
- }
- catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION("dbaccess"); }
+ OUString sInfo(m_sErrorString.replaceFirst("$command$", sCommandToExecute));
+ css::uno::Any aAppend = SQLExceptionInfo::createException(SQLExceptionInfo::TYPE::SQLContext, sInfo, OUString(), 0);
+ pLastExceptionInChain->NextException = aAppend;
// propagate
- aError.doThrow();
+ throw;
}
}
diff --git a/dbaccess/source/core/api/RowSet.hxx b/dbaccess/source/core/api/RowSet.hxx
index 6da5fdb2ece1..4dc244d1b5db 100644
--- a/dbaccess/source/core/api/RowSet.hxx
+++ b/dbaccess/source/core/api/RowSet.hxx
@@ -116,6 +116,7 @@ namespace dbaccess
OUString m_aUpdateCatalogName; // is set by a query
OUString m_aUpdateSchemaName; // is set by a query
OUString m_aUpdateTableName; // is set by a query
+ OUString m_sErrorString;
sal_Int32 m_nFetchDirection;
sal_Int32 m_nFetchSize;
More information about the Libreoffice-commits
mailing list