Bug 456946 - kdiff3 can't read files from bash <()
Summary: kdiff3 can't read files from bash <()
Status: RESOLVED INTENTIONAL
Alias: None
Product: kdiff3
Classification: Applications
Component: application (other bugs)
Version First Reported In: 1.9.5
Platform: Neon Linux
: NOR normal
Target Milestone: ---
Assignee: michael
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-07-20 13:14 UTC by Enmk
Modified: 2022-09-20 18:17 UTC (History)
0 users

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 Enmk 2022-07-20 13:14:47 UTC
SUMMARY
***

***


STEPS TO REPRODUCE
1. kdiff3 <(echo hello) <(echo world) 

OBSERVED RESULT
kdiff3 shows error popup multiple times and doesn't display any diff

$ kdiff3 <(echo hello) <(echo world)
org.kde.kdiff3: "Loading A: /dev/fd/63"
kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'."
org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() =  173
kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'."
org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() =  173
kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'."
org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() =  173
org.kde.kdiff3: "Loading B: /dev/fd/62"
kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'."
org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() =  173
kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'."
org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() =  173
kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'."
org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() =  173
org.kde.kdiff3: "Diff: A <-> B"
org.kde.kdiff3: "Linediff: A <-> B"
org.kde.kdiff3: Enter: calcDiff3LineListUsingAB
org.kde.kdiff3: Leave: calcDiff3LineListUsingAB

EXPECTED RESULT
kdiff3 is able to read from file substitution and display a diff

SOFTWARE/OS VERSIONS
Operating System: KDE neon 5.24
KDE Plasma Version: 5.24.5
KDE Frameworks Version: 5.94.0
Qt Version: 5.15.4
Kernel Version: 5.13.0-48-generic (64-bit)
Graphics Platform: X11
Processors: 12 × Intel® Core™ i7-8750H CPU @ 2.20GHz
Memory: 31.0 GiB of RAM
Graphics Processor: Mesa Intel® UHD Graphics 630

ADDITIONAL INFORMATION
$ kdiff3 --version
kdiff3 1.9.5 (64 bit)

$ sha256sum `which kdiff3`
397555cae80ca330a2ae30f0c30b28e0109e955e59e260cd606980e88bcf8477  /usr/bin/kdiff3

$ apt show kdiff3
Package: kdiff3
Version: 1.9.5-0xneon+20.04+focal+release+build14
Priority: optional
Section: kde
Maintainer: Neon CI <neon@kde.org>
Installed-Size: 5,264 kB
Depends: libc6 (>= 2.14), libkf5configcore5, libkf5configwidgets5, libkf5coreaddons5, libkf5crash5, libkf5i18n5, libkf5kiocore5, libkf5kiowidgets5, libkf5parts5, libkf5widgetsaddons5, libkf5xmlgui5, libqt5core5a (>= 5.15.2+p20.04+tunstable+git20220305.0110), libqt5gui5 (>= 5.15.2+p20.04+tunstable+git20220305.0110), libqt5printsupport5 (>= 5.15.2+p20.04+tunstable+git20220305.0110), libqt5widgets5 (>= 5.15.2+p20.04+tunstable+git20220305.0110), libstdc++6 (>= 5)
Recommends: kdiff3-doc
Breaks: kdiff3-qt (<< 1.0)
Replaces: kdiff3-qt (<< 1.0)
Homepage: https://kde.org/applications/development/kdiff3
Download-Size: 863 kB
APT-Manual-Installed: yes
Comment 1 michael 2022-09-18 03:55:12 UTC
This particular example actually reveals a bug is kdiff3's file validation. Non-normal files such as pipes are supposed to be skipped. Depending there nature weird things can happen. In this case a fictitious filename is derived from the link. I will look into what happens when actually files are passed using this syntax.
Comment 2 michael 2022-09-20 18:17:14 UTC
After examining this I have determined it is not technically feasible for kdiff3 to support this. Bugs such as this https://bugreports.qt.io/browse/QTBUG-15261 are the reason. Duplicating code in the form of direct c/c++ style I/O operations is not a practical solution. KDiff3's primary function of comparing normal files is not compromised by lack of pipe/redirect support. Interestingly trying this syntax with real files does results in kdiff3 completely ignoring the redirect. This is why explicit parameters are used. The specific example used here and similar attempts to directly pipe command output will now generate the intended error instead of sending a bogus file name to KIO/Qt.