LMMS / LMMS/lmms

AutomationEditor::paintEvent() - Division with zero

Open
#5,833 10 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
C++
Stars
10.4k
Forks
1.3k
Avg merge
2d 13h
Merged PRs (30d)
7

Description

On master compiled with `-DCMAKE_BUILD_TYPE=Debug -DWANT_DEBUG_FPE=ON`

```
(gdb) frame 0
#0 AutomationEditor::paintEvent (this=0x55555a4a1ca0, pe=0x7fffffffbaa0)
at /home/zonkmachine/builds/lmms/src/gui/editors/AutomationEditor.cpp:1470
1470 / (float)( m_maxLevel - m_minLevel ) ) );
(gdb) print m_maxLevel
$2 = 0
(gdb) print m_minLevel
$3 = 0
(gdb)
```
https://github.com/LMMS/lmms/blob/3ad0462d44196d6e48fd66350b6af46860547c5f/src/gui/editors/AutomationEditor.cpp#L1470

I don't know what's best here. I can make the offending program file run in gdb by initializing `m_minLevel` to 0 and `m_maxLevel` to 1.

#### Logs

Click to expand

Thread 1 "lmms" received signal SIGFPE, Arithmetic exception.

AutomationEditor::paintEvent (this=0x55555a4a1ca0, pe=0x7fffffffbaa0)
at /home/zonkmachine/builds/lmms/src/gui/editors/AutomationEditor.cpp:1470
1470 / (float)( m_maxLevel - m_minLevel ) ) );
(gdb) bt full
#0 AutomationEditor::paintEvent(QPaintEvent*) (this=0x55555a4a1ca0, pe=0x7fffffffbaa0)
at /home/zonkmachine/builds/lmms/src/gui/editors/AutomationEditor.cpp:1470
m = {val = 93825075388241}
opt =
{version = 1, type = 0, state = {i = 1}, direction = Qt::LeftToRight, rect = {x1 = 0, y1 = 0, x2 = 851, y2 = 304}, fontMetrics = {d = {d = 0x555555f04c00}}, palette = {static staticMetaObject = {d = {superdata = {direct = 0x0}, stringdata = 0x7ffff6ec6c80, data = 0x7ffff6ec6b20, static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}, d = 0x55555adb2a50, {data = {current_group = 2, resolve_mask = 1050435}, for_faster_swapping_dont_use = 16806962}}, styleObject = 0x55555a4a1ca0}
p =
{static staticMetaObject = {d = {superdata = {direct = 0x0}, stringdata = 0x7ffff6ed1e00, data = 0x7ffff6ed1d20, static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x55555b011c00}}
fgColor =
{cspec = QColor::Rgb, ct = {argb = {alpha = 65535, red = 65535, green = 65535, blue = 65535, pad = 0}, ahsv = {alpha = 65535, hue = 65535, saturation = 65535, value = 65535, pad = 0}, acmyk = {alpha = 65535, cyan = 65535, magenta = 65535, yellow = 65535, black = 0}, ahsl = {alpha = 65535, hue = 65535, saturation = 65535, lightness = 65535, pad = 0}, argbExtended = {alphaF16 = 65535, redF16 = 65535, greenF16 = 65535, blueF16 = 65535, pad = 0}, array = {65535, 65535, 65535, 65535, 0}}}
bgColor = {d = {d = 0x55555adb3b50}}
grid_height = 277
grid_bottom = 292
font_height = 14
text_flags = {i = 130}
sel_pos_start = 0
sel_pos_end = 0
selLevel_start = 0
selLevel_end = 0
x = 0
w = 0
y = 0
h = 0
l = 32767
cursor = 0x70552d10cfdf6f00
mousePosition = {xp = 1518173600, yp = 21845}
#1 0x00007ffff7a9a30e in QWidget::event(QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#2 0x00007ffff7a59013 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#3 0x00007ffff66491ca in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#4 0x00007ffff7a9263a in QWidgetPrivate::sendPaintEvent(QRegion const&) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#5 0x00007ffff7a92e82 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#6 0x00007ffff7a941e3 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#7 0x00007ffff7a94002 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#8 0x00007ffff7a94002 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#9 0x00007ffff7a92b9c in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#10 0x00007ffff7a941e3 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, --Type for more, q to quit, c to continue without paging--c
QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#11 0x00007ffff7a92b9c in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#12 0x00007ffff7a941e3 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#13 0x00007ffff7a94002 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#14 0x00007ffff7a92b9c in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#15 0x00007ffff7a941e3 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#16 0x00007ffff7a92b9c in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#17 0x00007ffff7a941e3 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#18 0x00007ffff7a92b9c in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#19 0x00007ffff7a941e3 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#20 0x00007ffff7a92b9c in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#21 0x00007ffff7a941e3 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#22 0x00007ffff7a92b9c in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#23 0x00007ffff7a941e3 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList const&, int, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#24 0x00007ffff7a92b9c in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags, QPainter*, QWidgetRepaintManager*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#25 0x00007ffff7a69f7a in () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#26 0x00007ffff7a9aa37 in QWidget::event(QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#27 0x00007ffff7a59013 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#28 0x00007ffff66491ca in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#29 0x00007ffff664bbc1 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#30 0x00007ffff66a11c7 in () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#31 0x00007ffff52b54db in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#32 0x00007ffff52b5788 in () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#33 0x00007ffff52b5853 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#34 0x00007ffff66a0843 in QEventDispatcherGlib::processEvents(QFlags) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#35 0x00007ffff6647a4b in QEventLoop::exec(QFlags) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#36 0x00007ffff664ffc6 in QCoreApplication::exec() () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#37 0x0000555555725d1f in main(int, char**) (argc=1, argv=0x7fffffffdf38) at /home/zonkmachine/builds/lmms/src/core/main.cpp:989
coreOnly = false
fullscreen = true
exitAfterImport = false
allowRoot = false
renderLoop = false
renderTracks = false
fileToLoad = {static null = {}, d = 0x7ffff672e8a0 }
fileToImport = {static null = {}, d = 0x7ffff672e8a0 }
renderOut = {static null = {}, d = 0x7ffff672e8a0 }
profilerOutputFile = {static null = {}, d = 0x7ffff672e8a0 }
configFile = {static null = {}, d = 0x7ffff672e8a0 }
app = 0x555555c93c00
qs = {interpolation = Mixer::qualitySettings::Interpolation_SincFastest, oversampling = Mixer::qualitySettings::Oversampling_2x}
os = {m_sampleRate = 44100, m_bitRateSettings = {m_bitRate = 160, m_isVariableBitRate = false}, m_bitDepth = OutputSettings::Depth_16Bit, m_stereoMode = OutputSettings::StereoMode_JointStereo, m_compressionLevel = 0.5}
eff = ProjectRenderer::WaveFile
pos = {static null = {}, d = 0x555555f05700}
sparam = {sched_priority = 50}
sa = {__sigaction_handler = {sa_handler = 0x1, sa_sigaction = 0x1}, sa_mask = {__val = {0, 140737488346936, 93824996507596, 93824998592096, 140737320570825, 140737488346576, 93824998170632, 92, 140737488346608, 1, 93824996507691, 1, 4295032831, 140737488346624, 93824996507717, 93}}, sa_flags = 4, sa_restorer = 0x0}
destroyEngine = false
ret = 32767

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in src/gui/editors/AutomationEditor.cpp at line 1470 and inspect where m_minLevel and m_maxLevel are initialized or updated. Reproduce with a Debug build using -DWANT_DEBUG_FPE=ON and the reported program file, then verify that AutomationEditor::paintEvent() no longer raises SIGFPE when both values are zero.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
desktop
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.