I was trying to look into #11715 and came across the following Valgrind error:
==12698== Syscall param writev(vector[...]) points to uninitialised byte(s) ==12698== at 0x61F578D: __writev (writev.c:26) ==12698== by 0x61F578D: writev (writev.c:24) ==12698== by 0x4A83BFC: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==12698== by 0x4A83FD0: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==12698== by 0x4A84246: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==12698== by 0x4A84ACB: xcb_flush (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==12698== by 0x17C8F06: lyx::frontend::GuiApplication::nativeEventFilter(QByteArray const&, void*, long*) (GuiApplication.cpp:3366) ==12698== by 0x5AA4EEE: QAbstractEventDispatcher::filterNativeEvent(QByteArray const&, void*, long*) (qabstracteventdispatcher.cpp:484) ==12698== by 0x9C37854: QXcbConnection::handleXcbEvent(xcb_generic_event_t*) (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.12.4) ==12698== by 0x9C38829: QXcbConnection::processXcbEvents(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.12.4) ==12698== by 0x9C63286: ??? (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.12.4) ==12698== by 0x633684C: g_main_context_dispatch (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6200.1) ==12698== by 0x6336ACF: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6200.1) ==12698== Address 0x8b13a91 is 4,529 bytes inside a block of size 21,152 alloc'd ==12698== at 0x483CD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==12698== by 0x4A83590: xcb_connect_to_fd (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==12698== by 0x4A876E1: xcb_connect_to_display_with_auth_info (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==12698== by 0x880BB79: _XConnectXCB (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0) ==12698== by 0x87FC318: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0) ==12698== by 0x9C64B5F: QXcbBasicConnection::QXcbBasicConnection(char const*) (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.12.4) ==12698== by 0x9C363C1: QXcbConnection::QXcbConnection(QXcbNativeInterface*, bool, unsigned int, char const*) (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.12.4) ==12698== by 0x9C3B0F9: QXcbIntegration::QXcbIntegration(QStringList const&, int&, char**) (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.12.4) ==12698== by 0x9BC2512: ??? (in /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so) ==12698== by 0x534C532: QPlatformIntegrationFactory::create(QString const&, QStringList const&, int&, char**, QString const&) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.12.4) ==12698== by 0x535A300: QGuiApplicationPrivate::createPlatformIntegration() (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.12.4) ==12698== by 0x535BD47: QGuiApplicationPrivate::createEventDispatcher() (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.12.4) This Valgrind error can be triggered by just starting a new document, typing "abc", doing "shift + <Left>" to select "c", and then quitting LyX. Attached is a patch. I really don't know what I'm doing. The use of calloc scares me. I just used the xcb_send_event man page and experimented until compilation and valgrind did not complain. Could anyone take a close look at this? If there is a better fix, please go ahead. related links: https://www.x.org/releases/current/doc/man/man3/xcb_send_event.3.xhtml https://bugreports.qt.io/browse/QTBUG-56518 https://git.sailfishos.org/mer-core/qtbase/commit/b4fc5b71e907163e075ff39cab5297c9b9bafd0d https://gitlab.freedesktop.org/xorg/lib/libxcb/issues/18 Scott
From 361b40e0c030c6c2269f86b5734872e4b5166ee9 Mon Sep 17 00:00:00 2001 From: Scott Kostyshak <skost...@lyx.org> Date: Tue, 18 Feb 2020 21:39:18 -0500 Subject: [PATCH] Fix write to uninitialized bytes for XCB event As the xcb_send_event man page [1] states, In order to properly initialize these bytes, we allocate 32 bytes even though we only need less for an xcb_configure_notify_event_t This commit fixes the following Valgrind error, which could be triggered by selecting a letter in LyX: ==12698== Syscall param writev(vector[...]) points to uninitialised byte(s) ==12698== at 0x61F578D: __writev (writev.c:26) ==12698== by 0x61F578D: writev (writev.c:24) ==12698== by 0x4A83BFC: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==12698== by 0x4A83FD0: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==12698== by 0x4A84246: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==12698== by 0x4A84ACB: xcb_flush (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==12698== by 0x17C8F06: lyx::frontend::GuiApplication::nativeEventFilter(QByteArray const&, void*, long*) (GuiApplication.cpp:3366) ==12698== by 0x5AA4EEE: QAbstractEventDispatcher::filterNativeEvent(QByteArray const&, void*, long*) (qabstracteventdispatcher.cpp:484) [1] https://www.x.org/releases/current/doc/man/man3/xcb_send_event.3.xhtml --- src/frontends/qt/GuiApplication.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/frontends/qt/GuiApplication.cpp b/src/frontends/qt/GuiApplication.cpp index 8fdd9bf99d..e62b3e79e0 100644 --- a/src/frontends/qt/GuiApplication.cpp +++ b/src/frontends/qt/GuiApplication.cpp @@ -3352,18 +3352,19 @@ bool GuiApplication::nativeEventFilter(const QByteArray & eventType, // not doing that, maybe because of our // "persistent selection" implementation // (see comments in GuiSelection.cpp). - xcb_selection_notify_event_t nev; - nev.response_type = XCB_SELECTION_NOTIFY; - nev.requestor = srev->requestor; - nev.selection = srev->selection; - nev.target = srev->target; - nev.property = XCB_NONE; - nev.time = XCB_CURRENT_TIME; + xcb_selection_notify_event_t *nev = (xcb_selection_notify_event_t*) calloc(32, 1); + nev->response_type = XCB_SELECTION_NOTIFY; + nev->requestor = srev->requestor; + nev->selection = srev->selection; + nev->target = srev->target; + nev->property = XCB_NONE; + nev->time = XCB_CURRENT_TIME; xcb_connection_t * con = QX11Info::connection(); xcb_send_event(con, 0, srev->requestor, XCB_EVENT_MASK_NO_EVENT, - reinterpret_cast<char const *>(&nev)); + reinterpret_cast<char const *>(nev)); xcb_flush(con); + free(nev); #endif return true; } -- 2.20.1
signature.asc
Description: PGP signature
-- lyx-devel mailing list lyx-devel@lists.lyx.org http://lists.lyx.org/mailman/listinfo/lyx-devel