Bug 426051 - ark crashes when opening an encrypted 7z
Summary: ark crashes when opening an encrypted 7z
Status: RESOLVED FIXED
Alias: None
Product: ark
Classification: Applications
Component: general (other bugs)
Version First Reported In: 20.04.2
Platform: openSUSE Linux
: NOR crash
Target Milestone: ---
Assignee: Tom Moebert
URL:
Keywords: drkonqi
Depends on:
Blocks:
 
Reported: 2020-09-01 09:50 UTC by Tom Moebert
Modified: 2020-11-03 19:06 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tom Moebert 2020-09-01 09:50:30 UTC
Application: ark (20.04.2)

Qt Version: 5.12.7
Frameworks Version: 5.71.0
Operating System: Linux 5.3.18-lp152.36-default x86_64
Windowing system: X11
Distribution: openSUSE Leap 15.2

-- Information about the crash:
- What I was doing when the application crashed:

1. Get an AES encrypted 7z container from somewhere
2. Open any encrypted file within the container
3. Enter the wrong password
4. Confirm the dialog that you've entered the wrong password
5. The UI thread ends up in an endless recursion until it crashes

The crash can be reproduced every time.

-- Backtrace:
Application: Ark (ark), signal: Segmentation fault
Using host libthread_db library "/lib64/libthread_db.so.1".
[Current thread is 1 (Thread 0x7f1dfea03900 (LWP 8869))]

Thread 4 (Thread 0x7f1dd008e700 (LWP 8918)):
#0  0x00007f1dfa9d46db in poll () from /lib64/libc.so.6
#1  0x00007f1dd4cc3f71 in ?? () from /usr/lib64/libpulse.so.0
#2  0x00007f1dd4cb5b10 in pa_mainloop_poll () from /usr/lib64/libpulse.so.0
#3  0x00007f1dd4cb61a0 in pa_mainloop_iterate () from /usr/lib64/libpulse.so.0
#4  0x00007f1dd4cb6230 in pa_mainloop_run () from /usr/lib64/libpulse.so.0
#5  0x00007f1dd4cc3eb9 in ?? () from /usr/lib64/libpulse.so.0
#6  0x00007f1dd4a63018 in ?? () from /usr/lib64/pulseaudio/libpulsecommon-13.0.so
#7  0x00007f1df6d0d4f9 in start_thread () from /lib64/libpthread.so.0
#8  0x00007f1dfa9defbf in clone () from /lib64/libc.so.6

Thread 3 (Thread 0x7f1de05a1700 (LWP 8874)):
#0  0x00007f1dfa9d01d8 in read () from /lib64/libc.so.6
#1  0x00007f1df4c789a0 in ?? () from /usr/lib64/libglib-2.0.so.0
#2  0x00007f1df4c31298 in g_main_context_check () from /usr/lib64/libglib-2.0.so.0
#3  0x00007f1df4c31720 in ?? () from /usr/lib64/libglib-2.0.so.0
#4  0x00007f1df4c3188c in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#5  0x00007f1dfb36a19b in QEventDispatcherGlib::processEvents (this=0x7f1dd8000b10, flags=...) at kernel/qeventdispatcher_glib.cpp:424
#6  0x00007f1dfb30b32a in QEventLoop::exec (this=this@entry=0x7f1de05a0c80, flags=..., flags@entry=...) at kernel/qeventloop.cpp:225
#7  0x00007f1dfb13110a in QThread::exec (this=<optimized out>) at thread/qthread.cpp:531
#8  0x00007f1df8bf3cd5 in ?? () from /usr/lib64/libQt5DBus.so.5
#9  0x00007f1dfb1328b2 in QThreadPrivate::start (arg=0x7f1df8e6bd80) at thread/qthread_unix.cpp:361
#10 0x00007f1df6d0d4f9 in start_thread () from /lib64/libpthread.so.0
#11 0x00007f1dfa9defbf in clone () from /lib64/libc.so.6

Thread 2 (Thread 0x7f1debba0700 (LWP 8873)):
#0  0x00007f1dfa9d46db in poll () from /lib64/libc.so.6
#1  0x00007f1df3200307 in ?? () from /usr/lib64/libxcb.so.1
#2  0x00007f1df3201f3a in xcb_wait_for_event () from /usr/lib64/libxcb.so.1
#3  0x00007f1dee995300 in ?? () from /usr/lib64/libQt5XcbQpa.so.5
#4  0x00007f1dfb1328b2 in QThreadPrivate::start (arg=0x560877e7b800) at thread/qthread_unix.cpp:361
#5  0x00007f1df6d0d4f9 in start_thread () from /lib64/libpthread.so.0
#6  0x00007f1dfa9defbf in clone () from /lib64/libc.so.6

Thread 1 (Thread 0x7f1dfea03900 (LWP 8869)):
[KCrash Handler]
#4  0x00007f1dfb2930e1 in QIODevicePrivate::QRingBufferRef::isEmpty (this=0x5608785aeb78) at ../../include/QtCore/5.12.7/QtCore/private/../../../../../src/corelib/io/qiodevice_p.h:105
#5  (anonymous namespace)::QProcessPoller::QProcessPoller (proc=..., this=0x7ffcc9c1c0a0) at io/qprocess_unix.cpp:174
#6  QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:837
#7  0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#8  0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#9  0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#10 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1c300, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#11 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1c300) at kernel/qobject.cpp:3784
#12 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1c300) at kernel/qobject.cpp:3657
#13 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#14 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=this@entry=0x5608785aeae0, channel=channel@entry=0x5608785aec08) at io/qprocess.cpp:1071
#15 0x00007f1dfb28e32c in QProcessPrivate::_q_canReadStandardOutput (this=this@entry=0x5608785aeae0) at io/qprocess.cpp:1082
#16 0x00007f1dfb293298 in QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:858
#17 0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#18 0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#19 0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#20 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1c640, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#21 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1c640) at kernel/qobject.cpp:3784
#22 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1c640) at kernel/qobject.cpp:3657
#23 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#24 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=this@entry=0x5608785aeae0, channel=channel@entry=0x5608785aec08) at io/qprocess.cpp:1071
#25 0x00007f1dfb28e32c in QProcessPrivate::_q_canReadStandardOutput (this=this@entry=0x5608785aeae0) at io/qprocess.cpp:1082
#26 0x00007f1dfb293298 in QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:858
#27 0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#28 0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#29 0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#30 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1c980, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#31 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1c980) at kernel/qobject.cpp:3784
#32 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1c980) at kernel/qobject.cpp:3657
#33 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#34 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=this@entry=0x5608785aeae0, channel=channel@entry=0x5608785aec08) at io/qprocess.cpp:1071
#35 0x00007f1dfb28e32c in QProcessPrivate::_q_canReadStandardOutput (this=this@entry=0x5608785aeae0) at io/qprocess.cpp:1082
#36 0x00007f1dfb293298 in QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:858
#37 0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#38 0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#39 0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#40 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1ccc0, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#41 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1ccc0) at kernel/qobject.cpp:3784
#42 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1ccc0) at kernel/qobject.cpp:3657
#43 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#44 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=this@entry=0x5608785aeae0, channel=channel@entry=0x5608785aec08) at io/qprocess.cpp:1071
#45 0x00007f1dfb28e32c in QProcessPrivate::_q_canReadStandardOutput (this=this@entry=0x5608785aeae0) at io/qprocess.cpp:1082
#46 0x00007f1dfb293298 in QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:858
#47 0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#48 0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#49 0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#50 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1d000, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#51 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1d000) at kernel/qobject.cpp:3784
#52 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1d000) at kernel/qobject.cpp:3657
#53 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#54 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=this@entry=0x5608785aeae0, channel=channel@entry=0x5608785aec08) at io/qprocess.cpp:1071
#55 0x00007f1dfb28e32c in QProcessPrivate::_q_canReadStandardOutput (this=this@entry=0x5608785aeae0) at io/qprocess.cpp:1082
#56 0x00007f1dfb293298 in QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:858
#57 0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#58 0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#59 0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#60 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1d340, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#61 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1d340) at kernel/qobject.cpp:3784
#62 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1d340) at kernel/qobject.cpp:3657
#63 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#64 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=this@entry=0x5608785aeae0, channel=channel@entry=0x5608785aec08) at io/qprocess.cpp:1071
#65 0x00007f1dfb28e32c in QProcessPrivate::_q_canReadStandardOutput (this=this@entry=0x5608785aeae0) at io/qprocess.cpp:1082
#66 0x00007f1dfb293298 in QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:858
#67 0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#68 0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#69 0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#70 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1d680, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#71 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1d680) at kernel/qobject.cpp:3784
#72 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1d680) at kernel/qobject.cpp:3657
#73 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#74 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=this@entry=0x5608785aeae0, channel=channel@entry=0x5608785aec08) at io/qprocess.cpp:1071
#75 0x00007f1dfb28e32c in QProcessPrivate::_q_canReadStandardOutput (this=this@entry=0x5608785aeae0) at io/qprocess.cpp:1082
#76 0x00007f1dfb293298 in QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:858
#77 0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#78 0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#79 0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#80 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1d9c0, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#81 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1d9c0) at kernel/qobject.cpp:3784
#82 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1d9c0) at kernel/qobject.cpp:3657
#83 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#84 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=this@entry=0x5608785aeae0, channel=channel@entry=0x5608785aec08) at io/qprocess.cpp:1071
#85 0x00007f1dfb28e32c in QProcessPrivate::_q_canReadStandardOutput (this=this@entry=0x5608785aeae0) at io/qprocess.cpp:1082
#86 0x00007f1dfb293298 in QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:858
#87 0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#88 0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#89 0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#90 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1dd00, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#91 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1dd00) at kernel/qobject.cpp:3784
#92 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1dd00) at kernel/qobject.cpp:3657
#93 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#94 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=this@entry=0x5608785aeae0, channel=channel@entry=0x5608785aec08) at io/qprocess.cpp:1071
#95 0x00007f1dfb28e32c in QProcessPrivate::_q_canReadStandardOutput (this=this@entry=0x5608785aeae0) at io/qprocess.cpp:1082
#96 0x00007f1dfb293298 in QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:858
#97 0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#98 0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#99 0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#100 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1e040, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#101 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1e040) at kernel/qobject.cpp:3784
#102 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1e040) at kernel/qobject.cpp:3657
#103 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#104 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=this@entry=0x5608785aeae0, channel=channel@entry=0x5608785aec08) at io/qprocess.cpp:1071
#105 0x00007f1dfb28e32c in QProcessPrivate::_q_canReadStandardOutput (this=this@entry=0x5608785aeae0) at io/qprocess.cpp:1082
#106 0x00007f1dfb293298 in QProcessPrivate::waitForFinished (this=this@entry=0x5608785aeae0, msecs=msecs@entry=5) at io/qprocess_unix.cpp:858
#107 0x00007f1dfb288f0b in QProcess::waitForFinished (this=<optimized out>, msecs=5) at io/qprocess.cpp:1920
#108 0x00007f1dfe5ffe67 in Kerfuffle::CliInterface::killProcess(bool) () from /usr/lib64/libkerfuffle.so.20
#109 0x00007f1dfe604e42 in Kerfuffle::CliInterface::readStdout(bool) () from /usr/lib64/libkerfuffle.so.20
#110 0x00007f1dfb33cd0f in QtPrivate::QSlotObjectBase::call (a=0x7ffcc9c1e380, r=0x5608785710d0, this=0x56087855ada0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
#111 QMetaObject::activate (sender=sender@entry=0x560878500830, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1e380) at kernel/qobject.cpp:3784
#112 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x560878500830, m=m@entry=0x7f1dfb7b9cc0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffcc9c1e380) at kernel/qobject.cpp:3657
#113 0x00007f1dfb28780a in QProcess::readyReadStandardOutput (this=this@entry=0x560878500830, _t1=...) at .moc/moc_qprocess.cpp:366
#114 0x00007f1dfb28e221 in QProcessPrivate::tryReadFromChannel (this=0x5608785aeae0, channel=0x5608785aec08) at io/qprocess.cpp:1071
#115 0x00007f1dfb28e6f0 in QProcessPrivate::_q_canReadStandardOutput (this=<optimized out>) at io/qprocess.cpp:1082
#116 QProcess::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=0x7ffcc9c1e550) at .moc/moc_qprocess.cpp:207
#117 0x00007f1dfb33cbf5 in QMetaObject::activate (sender=sender@entry=0x56087843abe0, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffcc9c1e550) at kernel/qobject.cpp:3804
#118 0x00007f1dfb33d307 in QMetaObject::activate (sender=sender@entry=0x56087843abe0, m=m@entry=0x7f1dfb7bbc40 <QSocketNotifier::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffcc9c1e550) at kernel/qobject.cpp:3657
#119 0x00007f1dfb349548 in QSocketNotifier::activated (this=this@entry=0x56087843abe0, _t1=<optimized out>, _t2=...) at .moc/moc_qsocketnotifier.cpp:140
#120 0x00007f1dfb349902 in QSocketNotifier::event (this=0x56087843abe0, e=0x7ffcc9c1e830) at kernel/qsocketnotifier.cpp:266
#121 0x00007f1dfc13ca0c in QApplicationPrivate::notify_helper (this=this@entry=0x560877e57930, receiver=receiver@entry=0x56087843abe0, e=e@entry=0x7ffcc9c1e830) at kernel/qapplication.cpp:3701
#122 0x00007f1dfc144020 in QApplication::notify (this=0x7ffcc9c1eb40, receiver=0x56087843abe0, e=0x7ffcc9c1e830) at kernel/qapplication.cpp:3447
#123 0x00007f1dfb30d0d8 in QCoreApplication::notifyInternal2 (receiver=0x56087843abe0, event=0x7ffcc9c1e830) at kernel/qcoreapplication.cpp:1088
#124 0x00007f1dfb30d2ae in QCoreApplication::sendEvent (receiver=<optimized out>, event=event@entry=0x7ffcc9c1e830) at kernel/qcoreapplication.cpp:1476
#125 0x00007f1dfb36ade8 in socketNotifierSourceDispatch (source=0x560877ebf920) at kernel/qeventdispatcher_glib.cpp:106
#126 0x00007f1df4c31464 in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
#127 0x00007f1df4c31800 in ?? () from /usr/lib64/libglib-2.0.so.0
#128 0x00007f1df4c3188c in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#129 0x00007f1dfb36a17f in QEventDispatcherGlib::processEvents (this=0x560877ecfaa0, flags=...) at kernel/qeventdispatcher_glib.cpp:422
#130 0x00007f1dfb30b32a in QEventLoop::exec (this=this@entry=0x7ffcc9c1ea50, flags=..., flags@entry=...) at kernel/qeventloop.cpp:225
#131 0x00007f1dfb314530 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1389
#132 0x000056087748ad44 in ?? ()
#133 0x00007f1dfa90734a in __libc_start_main () from /lib64/libc.so.6
#134 0x000056087748beda in _start ()
[Inferior 1 (process 8869) detached]

Possible duplicates by query: bug 425629, bug 425619, bug 425334, bug 425205, bug 424911.

Reported using DrKonqi
Comment 1 Elvis Angelaccio 2020-09-05 11:16:08 UTC
Cannot reproduce. Could you attach a test archive maybe?
Comment 2 Tom Moebert 2020-09-05 17:07:59 UTC
No I can't, sry. The archives in question contain data that I'm not willing to share publicly, even though encrypted.

Instead, I analyzed the problem myself: Ark calls the 7z executable asking it to uncrypt the archive. This doesn't work, because wrong password. Now, the 7z exec is spamming the stdout with msgs "ERROR: Data Error in encrypted file. Wrong password?"

Ark says: "Oh, we've got new input on stdout? Let's handle it!" In CliInterface::readStdout() we find the wrong password message and kill the process in CliInterface::killProcess(). There we do m_process->waitForFinished, which goes back into Qt's event loop. Any more work to do? Yes! Another "ERROR: Data Error in encrypted file. Wrong password?" Great, let's handle it! We find the wrong password message, kill the process, wait again, and search for events. What comes next? Oh, another message on stdout. Let's handle it!

So, if you want to kill the process, I'd suggest to disconnect() the QProcess::readyReadStandardOutput signal in CliInterface::killProcess().
Comment 3 Elvis Angelaccio 2020-09-05 17:30:57 UTC
Thanks for the analysys. Would you mind submitting a merge request at https://invent.kde.org/utilities/ark
Comment 4 Tom Moebert 2020-09-05 18:10:29 UTC
Ok. Since the connection slot is a lambda, I would probably store the QMetaObject::Connection object as member, so I can disconnect it directly.
Comment 5 Christoph Feck 2020-09-24 13:40:26 UTC
Thanks Tom for your merge request! It looks like the bug janitor doesn't see merge requests that only have CCBUG in the description, so let me add it here manually.

https://invent.kde.org/utilities/ark/-/merge_requests/10
Comment 6 Elvis Angelaccio 2020-11-03 19:01:33 UTC
Git commit cee79c348b34bf99fe8d583a6ea8fe80f01c37d0 by Elvis Angelaccio, on behalf of Tom Moebert.
Committed on 03/11/2020 at 18:58.
Pushed by elvisangelaccio into branch 'master'.

Fix an endless recursion when unpacking archives

Previously, if a process keeps spamming output on stdout, ark would
continue to react on this output, even though it was about to kill that
process. This may end in an endless recursion.

M  +5    -1    kerfuffle/cliinterface.cpp
M  +2    -0    kerfuffle/cliinterface.h

https://invent.kde.org/utilities/ark/commit/cee79c348b34bf99fe8d583a6ea8fe80f01c37d0
Comment 7 Elvis Angelaccio 2020-11-03 19:03:05 UTC
@Tom: is there anything else missing or can we close this report?
Comment 8 Tom Moebert 2020-11-03 19:06:06 UTC
Fixed