Skip to content

Slysven main development#24

Closed
ahmedcharles wants to merge 6 commits intoMudlet:developmentfrom
ahmedcharles:slysven_main_development
Closed

Slysven main development#24
ahmedcharles wants to merge 6 commits intoMudlet:developmentfrom
ahmedcharles:slysven_main_development

Conversation

@ahmedcharles
Copy link
Copy Markdown
Contributor

Stephen's commits, only with a rebase. The content is the same.

@vadi2
Copy link
Copy Markdown
Member

vadi2 commented Aug 6, 2014

I've commented on the iconic issues commit.

@ahmedcharles
Copy link
Copy Markdown
Contributor Author

I'm trying to work through these to make the commits (and the commit messages) smaller. So, best not to merge them yet.

SlySven and others added 6 commits October 2, 2014 23:35
In four places (one a twin entry) the resource path was given as:
":/icons/icons/<icon>.png" when it should have been: ":/icons/<icon>.png",
additionally as one of these uses was for a dialog box where it closed
that box and committed any changes made with no option to cancel without
undoing them I feel it would be more appropriate to use an "apply" icon
(a green tick) rather than the originally intended "dialog-close" (a
white cross on a red filled in circle).

The main application was assigned the 16x16 icon but this appears blurry
on the system task switching control (on at least Linux and Windows)
platforms.  Using the 48x48 icon appears much better and has been
changed in mudlet::mudlet().  The central debug console was not assigned
an icon so in the system task switcher it appeared as a plain icon
(at least in Linux) - I have created a suitable icon (putting a quarter
size bug on the bottom right quarter of the mudlet 48x48 icon).
Similarly I have created one for the profile_preferences.ui form with
a superimposed spanner and actually used the mudlet_notepad one that was
already present but not used for the profile notes editor.  This makes
if a bit easy to tell which window is which when swapping between them
by keyboard!

When the profile_preferences.ui has the "Use Mudlet on a netbook"
feature set, the icon that appears on the Main Toolbar to toggle in
and out of "fullscreen" mode is the Oxygen "dialog-cancel" one, however
there is a specific icon "view-fullscreen" which more closely relates
to the function of this control, I have included it and changed to that
one.  As the control is actually a toggle I also have included the
corresponding "view-restore" image as well which it might be possible
to code to use...

On the "replay" toolbar the "replay speed down" icon was spelt as
"port.png" rather than "import.png" so the downward pointing double
arrow was not shown, leaving an empty button in some situations.

Within the Trigger Editor it has been commented by users that the icon
labelled "save" and featuring a disc symbol does not actually write
anything in a permanent manner and though the tooltip does warn of this
I believe a more coherant use could be made by replacing some of the
icons.  Building on the top tool bar "item" and "group" use of a page
and a folder respectively I have used the executing and error/stop
sub-icons from the oxygen "printer-printing" and "printer-error" images
and placed them on top of a page image to replace the
tag-checkbox-checked amd tag-checkbox for the item enabled/disabled
treeWidget icons, a second pair rendered in grey scale becomes the
ancestor disabled pair and one with a "bug" to the same scale represents
code that cannot be Lua compiled.  Combining both executing and error
sub-icons ontop of a pair of circular arrows on top of a page replaces
the activate/deactive toolbar button and the circular executing sub-icon
recoloured from green to orange with an arrow indicating the affixing of
the sub-icon onto a page becomes the slightly previously misleading
"save" (code) button next to it on the top toolbar.  In the special case
of a "circular" Alias a variant of this in red with a red cross over the
arrow is used as it indicates that the "code" cannot be affixed to the
"page", which does represent the fact that the page can't be saved until
it is fixed.  As a nice side effect, that extends the page metaphor, is
the oxygen "document-import" and "document-export" icons that,
particularly in the export case, emphasises that only the selected page
(or folder) IS what is exported.  Also, as we no longer use the oxygen
"save" (disk) icon to write the code into the system, we can now use
it for the save profile (replacing the double disc "save all" icon)
which sits more nicely alongside the "save as" (disc with a pencil
writing a new label) icon that is already used.  Finally, the delete
item used the oxygen "edit-delete-shred" image but that uses a
"crumpled" page which although perhaps appropriate does look visually
at odds with the clean straight edges of the other "page" icons.
As there didn't seem to be a "document-delete" image in the Oxygen set
I had to make one to match.

Signed-off-by: Stephen Lyons <slysven@virginmedia.com>
In four places (one a twin entry) the resource path was given as:
":/icons/icons/<icon>.png" when it should have been: ":/icons/<icon>.png",
additionally as one of these uses was for a dialog box where it closed
that box and committed any changes made with no option to cancel without
undoing them I feel it would be more appropriate to use an "apply" icon
(a green tick) rather than the originally intended "dialog-close" (a
white cross on a red filled in circle).

A missing "else" in dlgTriggerEditor::saveAlias() meant that the grey
check-box indicating an alias that would be active if the parent were
to be enabled was always seen even if it was actually active.

The main application was assigned the 16x16 icon but this appears blurry
on the system task switching control (on at least Linux and Windows)
platforms.  Using the 48x48 icon appears much better and has been
changed in mudlet::mudlet().  The central debug console was not assigned
an icon so in the system task switcher it appeared as a plain icon
(at least in Linux) - I have created a suitable icon (putting a quarter
size bug on the bottom right quarter of the mudlet 48x48 icon).
Similarly I have created one for the profile_preferences.ui form with
a superimposed spanner and actually used the mudlet_notepad one that was
already present but not used for the profile notes editor.  This makes
if a bit easy to tell which window is which when swapping between them
by keyboard!

When the profile_preferences.ui has the "Use Mudlet on a netbook"
feature set, the icon that appears on the Main Toolbar to toggle in
and out of "fullscreen" mode is the Oxygen "dialog-cancel" one, however
there is a specific icon "view-fullscreen" which more closely relates
to the function of this control, I have included it and changed to that
one.  As the control is actually a toggle I also have included the
corresponding "view-restore" image as well which it might be possible
to code to use...

On the "replay" toolbar the "replay speed down" icon was spelt as
"port.png" rather than "import.png" so the downward pointing double
arrow was not shown, leaving an empty button in some situations.

In the TConsole constructor, the tool-tip "next result" is supplied to
both the mpBufferSearchUp and Down controls.  Also, the Oxygen Icon
set has specific go-up-search and go-down-search images which seem
particularly suited to these functions rather than the green double
arrow icons that have been renamed "import" and "export" for Mudlet, I
changed the code to use the search ones.  Nearby on-screen and in code
the button to toggle time-stamps on and off is the generic "information"
icon, I have replaced this with one I made from the Oxygen
"format-list-ordered" image and replaced the single blue integers to the
left of the lines that indicate text with orange "0:00:0#" to more
closely model Mudlet's use, it is called "timestamped_lines".

The code that adjusts the Main Toolbar (and corresponding Toolbars in
the "Trigger" editor) Icons sizes and the treeWidget Icons in the latter
only, only updates the Trigger Editor for THAT Profile Active when the
Profile Preferences dialog is activated - however these are global
settings and changes should be sent to ALL profiles' Trigger Editors if
more than one profile is open.  Also the initialisation code in the
constructor for the Trigger Editor did not respect the design decision
to include the Icon Title under the Icon Image for large size icons.  By
using the Qt Signal/Slot system I have re-coded this section to update
all profiles when the global icon sizes are changed in ANY of them.

Within the Trigger Editor it has been commented by users that the icon
labelled "save" and featuring a disc symbol does not actually write
anything in a permanent manner and though the tooltip does warn of this
I believe a more coherant use could be made by replacing some of the
icons.  Building on the top tool bar "item" and "group" use of a page
and a folder respectively I have used the executing and error/stop
sub-icons from the oxygen "printer-printing" and "printer-error" images
and placed them on top of a page image to replace the
tag-checkbox-checked amd tag-checkbox for the item enabled/disabled
treeWidget icons, a second pair rendered in grey scale becomes the
ancestor disabled pair and one with a "bug" to the same scale represents
code that cannot be Lua compiled.  Combining both executing and error
sub-icons ontop of a pair of circular arrows on top of a page replaces
the activate/deactive toolbar button and the circular executing sub-icon
recoloured from green to orange with an arrow indicating the affixing of
the sub-icon onto a page becomes the slightly previously misleading
"save" (code) button next to it on the top toolbar.  In the special case
of a "circular" Alias a variant of this in red with a red cross over the
arrow is used as it indicates that the "code" cannot be affixed to the
"page", which does represent the fact that the page can't be saved until
it is fixed.  As a nice side effect, that extends the page metaphor, is
the oxygen "document-import" and "document-export" icons that,
particularly in the export case, emphasises that only the selected page
(or folder) IS what is exported.  Also, as we no longer use the oxygen
"save" (disk) icon to write the code into the system, we can now use
it for the save profile (replacing the double disc "save all" icon)
which sits more nicely alongside the "save as" (disc with a pencil
writing a new label) icon that is already used.  Finally, the delete
item used the oxygen "edit-delete-shred" image but that uses a
"crumpled" page which although perhaps appropriate does look visually
at odds with the clean straight edges of the other "page" icons.
As there didn't seem to be a "document-delete" image in the Oxygen set
I had to make one to match.

Finally(!) in most places where an Icon is specified a fixed QString
that refers to the location in the resource file is needed.
QStringLiteral() is a macro that allows the implict conversion from
const char to a QString to be done at compile time rather than run-time.
Also the result can be stored in read only memory.  Also it helps to
explicitly mark a string that is NOT to be translated by tr() which will
help in the future if we ever attempt to translate Mudlet into languages
other than en-US (yippee - as an Englishman I won't have to put up with
color rather than colour everywhere!)  If anyone is brave enough to set
the Q_NO_CAST_FROM_ASCII/Q_NO_CAST_TO_ASCII macros they will get to see
how many strings will have to be either wrapped in QStringLiteral or
tr() - not counting error messages in the Lua stuff in std::string form
that will have to be redone into QString until the point of conversion
to/from utf-8 into or out of the Lua subsystem so that it can also be
translated!!!

Signed-off-by: Stephen Lyons <slysven@virginmedia.com>
…als.

Though presently the argument supplied to the modified/renamed icon size
setting: dlgTriggerEditor::slot_setToolbarIconSize( int ) and the new:
dlgTriggerEditor::slot_setTreeWidgetIconSize( int ) ARE the globals
used to store this information, this is not implicit in their declared
purpose, so it is best to actually use the supplied value!

Signed-off-by: Stephen Lyons <slysven@virginmedia.com>
The Window Icons were not being used for profile_preferences dialog or
for the Central Debug console.  In the former it transpires the icon
was loaded from a relative file reference and not from the resource
file (and also for the icon for mudlet_custom_exit_properties) file;
and in the latter it was being set by code from the mudlet class which
just did not work - as it is being used as the central widget inside
a QMainWindow widget and THAT is what has to have the icon set!

Also, fix the fact that the profile preference was not opened in the
first tab but the third.

Signed-off-by: Stephen Lyons <slysven@virginmedia.com>
@SlySven
Copy link
Copy Markdown
Member

SlySven commented Jan 10, 2015

I think this should be put in to a back room for the moment so that we can pull it out and dust it off (or dissect out useful parts) in the future...
Looking to close without merging after 31 Jan 2015.

@vadi2 vadi2 closed this Jan 12, 2015
@vadi2 vadi2 mentioned this pull request Mar 31, 2017
vadi2 added a commit that referenced this pull request Nov 26, 2025
…rocessing (#8571)

<!-- Keep the title short & concise so anyone non-technical can
understand it,
     the title appears in PTB changelogs -->
#### Brief overview of PR changes/additions
Fix: heap-use-after-free when cleanup runs during alias/trigger/key
processing
#### Motivation for adding to Mudlet
Fixes crash when running
#8559 (comment)
benchmark on Linux.
#### Other info (issues closed, discussion etc)
==617553==ERROR: AddressSanitizer: heap-use-after-free on address
0x51200086e6d0 at pc 0x589b650367f6 bp 0x7ffc44dbc700 sp 0x7ffc44dbc6f8
READ of size 8 at 0x51200086e6d0 thread T0
#0 0x589b650367f5 in Tree<TAlias>::isActive() const
(/home/vadi/Programs/Mudlet/build/src/mudlet+0xe8a7f5) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#1 0x589b65d81408 in TAlias::match(QString const&)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1bd5408) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#2 0x589b6560c156 in AliasUnit::processDataStream(QString const&)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1460156) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#3 0x589b65c872b4 in Host::send(QString, bool, bool)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1adb2b4) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#4 0x589b65d96517 in TCommandLine::enterCommand(QKeyEvent*)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1bea517) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#5 0x589b65d93095 in TCommandLine::event(QEvent*)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1be7095) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#6 0x7ac668391c8a in QApplicationPrivate::notify_helper(QObject*,
QEvent*)
/home/qt/work/qt/qtbase/src/widgets/kernel/qapplication.cpp:3307:31
#7 0x7ac66839b2f0 in QApplication::notify(QObject*, QEvent*)
/home/qt/work/qt/qtbase/src/widgets/kernel/qapplication.cpp:2725:39
#8 0x7ac668b83f7f in QCoreApplication::notifyInternal2(QObject*,
QEvent*)
/home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1109:24
#9 0x7ac66840cc0b in QWidgetWindow::event(QEvent*)
/home/qt/work/qt/qtbase/src/widgets/kernel/qwidgetwindow.cpp:285:23
#10 0x7ac668391c8a in QApplicationPrivate::notify_helper(QObject*,
QEvent*)
/home/qt/work/qt/qtbase/src/widgets/kernel/qapplication.cpp:3307:31
#11 0x7ac668b83f7f in QCoreApplication::notifyInternal2(QObject*,
QEvent*)
/home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1109:24
#12 0x7ac6677ee8e2 in
QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent*)
/home/qt/work/qt/qtbase/src/gui/kernel/qguiapplication.cpp:2609:46
#13 0x7ac655cf9a04 in
QIBusPlatformInputContext::filterEventFinished(QDBusPendingCallWatcher*)
/home/qt/work/qt/qtbase/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp:523:57
#14 0x7ac668be8b74 in QtPrivate::QSlotObjectBase::call(QObject*, void**)
/home/qt/work/qt/qtbase/src/corelib/kernel/qobjectdefs_impl.h:461:57
#15 0x7ac668be8b74 in void doActivate<false>(QObject*, int, void**)
/home/qt/work/qt/qtbase/src/corelib/kernel/qobject.cpp:4255:30
#16 0x7ac6671e5142 in void QMetaObject::activate<void,
QDBusPendingCallWatcher*>(QObject*, QMetaObject const*, int, void*,
QDBusPendingCallWatcher* const&)
/home/qt/work/qt/qtbase/src/corelib/kernel/qobjectdefs.h:319:17
#17 0x7ac6671e5142 in
QDBusPendingCallWatcher::finished(QDBusPendingCallWatcher*)
/home/qt/work/qt/qtbase_build/src/dbus/DBus_autogen/include/moc_qdbuspendingcall.cpp:137:32
#18 0x7ac668bdd56b in QObject::event(QEvent*)
/home/qt/work/qt/qtbase/src/corelib/kernel/qobject.cpp:1411:31
#19 0x7ac668391c8a in QApplicationPrivate::notify_helper(QObject*,
QEvent*)
/home/qt/work/qt/qtbase/src/widgets/kernel/qapplication.cpp:3307:31
#20 0x7ac668b83f7f in QCoreApplication::notifyInternal2(QObject*,
QEvent*)
/home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1109:24
#21 0x7ac668b879e4 in
QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*)
/home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1904:36
#22 0x7ac668e7d416 in postEventSourceDispatch
/home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:246:39
#23 0x7ac6667145c4 (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x5d5c4)
(BuildId: 1eb6131419edb83b2178b682829a6913cf682d75)
#24 0x7ac666773736 (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0xbc736)
(BuildId: 1eb6131419edb83b2178b682829a6913cf682d75)
#25 0x7ac666713a62 in g_main_context_iteration
(/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x5ca62) (BuildId:
1eb6131419edb83b2178b682829a6913cf682d75)
#26 0x7ac668e7caad in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
/home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399:43
#27 0x7ac668b9002a in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)
/home/qt/work/qt/qtbase/src/corelib/kernel/qeventloop.cpp:186:22
#28 0x7ac668b8ba59 in QCoreApplication::exec()
/home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1452:36
#29 0x589b64ab0675 in main
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x904675) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#30 0x7ac66602a1c9 in __libc_start_call_main
csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#31 0x7ac66602a28a in __libc_start_main csu/../csu/libc-start.c:360:3
#32 0x589b649c1d04 in _start
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x815d04) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)

0x51200086e6d0 is located 16 bytes inside of 296-byte region
[0x51200086e6c0,0x51200086e7e8)
freed by thread T0 here:
#0 0x589b64a9b9f1 in operator delete(void*)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x8ef9f1) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#1 0x589b65d80711 in TAlias::~TAlias()
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1bd4711) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#2 0x589b6560eefc in AliasUnit::doCleanup()
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1462efc) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#3 0x589b65c8e88d in Host::incomingStreamProcessor(QString const&, int)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1ae288d) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#4 0x589b651b73b5 in TMainConsole::runTriggers(int)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x100b3b5) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#5 0x589b64e39c4b in TBuffer::commitLine(char, unsigned long&)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0xc8dc4b) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#6 0x589b64e28d4e in
TBuffer::translateToPlainText(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>&, bool)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0xc7cd4e) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#7 0x589b651b638d in
TMainConsole::printOnDisplay(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char>>&, bool)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x100a38d) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#8 0x589b64f9ed5b in TLuaInterpreter::feedTriggers(lua_State*)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0xdf2d5b) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#9 0x7ac66942ffa0 in luaD_precall
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/ldo.c:320:10
#10 0x7ac66943ad7a in luaV_execute
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/lvm.c:591:17
#11 0x7ac66942e96c in luaD_call
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/ldo.c:378:5
#12 0x7ac66942af70 in luaD_rawrunprotected
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/ldo.c:116:3
#13 0x7ac66942bb94 in luaD_pcall
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/ldo.c:464:12
#14 0x7ac66942bce0 in lua_pcall
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/lapi.c:821:12
#15 0x589b64fd65f1 in TLuaInterpreter::call(QString const&, QString
const&, bool) (/home/vadi/Programs/Mudlet/build/src/mudlet+0xe2a5f1)
(BuildId: c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#16 0x589b65d84d31 in TAlias::execute()
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1bd8d31) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#17 0x589b65d84577 in TAlias::match(QString const&)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1bd8577) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#18 0x589b6560c156 in AliasUnit::processDataStream(QString const&)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1460156) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#19 0x589b65c872b4 in Host::send(QString, bool, bool)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1adb2b4) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#20 0x589b65d96517 in TCommandLine::enterCommand(QKeyEvent*)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1bea517) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#21 0x589b65d93095 in TCommandLine::event(QEvent*)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1be7095) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#22 0x7ac668391c8a in QApplicationPrivate::notify_helper(QObject*,
QEvent*)
/home/qt/work/qt/qtbase/src/widgets/kernel/qapplication.cpp:3307:31

previously allocated by thread T0 here:
#0 0x589b64a9b171 in operator new(unsigned long)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x8ef171) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#1 0x589b6500f595 in TLuaInterpreter::startTempAlias(QString const&,
QString const&) (/home/vadi/Programs/Mudlet/build/src/mudlet+0xe63595)
(BuildId: c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#2 0x589b6512c41d in TLuaInterpreter::tempAlias(lua_State*)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0xf8041d) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#3 0x7ac66942ffa0 in luaD_precall
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/ldo.c:320:10
#4 0x7ac66943ad7a in luaV_execute
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/lvm.c:591:17
#5 0x7ac66942e96c in luaD_call
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/ldo.c:378:5
#6 0x7ac66942af70 in luaD_rawrunprotected
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/ldo.c:116:3
#7 0x7ac66942bb94 in luaD_pcall
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/ldo.c:464:12
#8 0x7ac66942bce0 in lua_pcall
/build/lua5.1-rMDsVj/lua5.1-5.1.5/src/lapi.c:821:12
#9 0x589b64fd65f1 in TLuaInterpreter::call(QString const&, QString
const&, bool) (/home/vadi/Programs/Mudlet/build/src/mudlet+0xe2a5f1)
(BuildId: c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#10 0x589b65d84d31 in TAlias::execute()
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1bd8d31) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#11 0x589b65d84577 in TAlias::match(QString const&)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1bd8577) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#12 0x589b6560c156 in AliasUnit::processDataStream(QString const&)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1460156) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#13 0x589b65c872b4 in Host::send(QString, bool, bool)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1adb2b4) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#14 0x589b65d96517 in TCommandLine::enterCommand(QKeyEvent*)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1bea517) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#15 0x589b65d93095 in TCommandLine::event(QEvent*)
(/home/vadi/Programs/Mudlet/build/src/mudlet+0x1be7095) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4)
#16 0x7ac668391c8a in QApplicationPrivate::notify_helper(QObject*,
QEvent*)
/home/qt/work/qt/qtbase/src/widgets/kernel/qapplication.cpp:3307:31

SUMMARY: AddressSanitizer: heap-use-after-free
(/home/vadi/Programs/Mudlet/build/src/mudlet+0xe8a7f5) (BuildId:
c98a5e4208b6daa52aa1b083c4ee6c4ab4552cc4) in Tree<TAlias>::isActive()
const
Shadow bytes around the buggy address:
  0x51200086e400: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x51200086e480: fd fd fd fd fd fd fd fd fd fd fd fd fd fa fa fa
  0x51200086e500: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0x51200086e580: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x51200086e600: fd fd fd fd fd fd fd fd fd fd fd fd fd fa fa fa
=>0x51200086e680: fa fa fa fa fa fa fa fa fd fd[fd]fd fd fd fd fd
  0x51200086e700: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x51200086e780: fd fd fd fd fd fd fd fd fd fd fd fd fd fa fa fa
  0x51200086e800: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0x51200086e880: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x51200086e900: fd fd fd fd fd fd fd fd fd fd fd fd fd fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==617553==ABORTING

Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants