summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMavridis Philippe <mavridisf@gmail.com>2024-06-10 11:58:46 +0300
committerMavridis Philippe <mavridisf@gmail.com>2024-06-10 11:58:46 +0300
commit1585ac78f99357cbbc5041026af1c6c585b728e4 (patch)
treefe08e01fce3f379de61da3938ba56ce26ce1d8c5
parent7cc4d46cf55b013a02b6c3b7df6b5d536e69f1f1 (diff)
downloadtdebase-feat/keditfiletype/prevent-application-octet-stream-editing.tar.gz
tdebase-feat/keditfiletype/prevent-application-octet-stream-editing.zip
KEditFileType: prevent inadvertent editing of application/octet-streamfeat/keditfiletype/prevent-application-octet-stream-editing
The default fallback mime type is not something that should be edited by the user except when explicitly requested. A confirmation is shown now before allowing the user to edit this mime type. Also, since KMimeType::mimeType(...) does NOT return a null value but the default mime type, the check for incorrect mime type failed, since it expected a null return value, and the default fallback mime type was used instead, making the user inadvertedly edit the default mime type. Incorrect mime types are now promptly recognized, and an error message is shown to the user in such cases. Signed-off-by: Mavridis Philippe <mavridisf@gmail.com>
-rw-r--r--kcontrol/filetypes/keditfiletype.cpp45
1 files changed, 39 insertions, 6 deletions
diff --git a/kcontrol/filetypes/keditfiletype.cpp b/kcontrol/filetypes/keditfiletype.cpp
index 8c6c06931..924782cf5 100644
--- a/kcontrol/filetypes/keditfiletype.cpp
+++ b/kcontrol/filetypes/keditfiletype.cpp
@@ -28,6 +28,9 @@
#include <tdecmdlineargs.h>
#include <tdesycoca.h>
#include <kstandarddirs.h>
+#include <tdemessagebox.h>
+
+#include <stdlib.h>
#ifdef TQ_WS_X11
#include <X11/Xlib.h>
@@ -131,7 +134,7 @@ int main(int argc, char ** argv)
bool createType = arg.startsWith( "*" );
KMimeType::Ptr mime;
-
+
if ( createType ) {
TQString mimeString = "application/x-kdeuser%1";
TQString loc;
@@ -152,10 +155,40 @@ int main(int argc, char ** argv)
}
mime = new KMimeType( loc, mimeString.arg( inc ), TQString::null, comment, patterns );
}
- else {
- mime = KMimeType::mimeType( arg );
- if (!mime)
- kdFatal() << "Mimetype " << arg << " not found" << endl;
+ else {
+ // The user has explicitly requested application/octet-stream
+ if (arg == KMimeType::defaultMimeType())
+ {
+ int res = KMessageBox::warningYesNo(nullptr, i18n(
+ "<qt>You are about to edit the fallback filetype for unknown/binary files."
+ "<br><br>This is not something you should normally do unless you know exactly"
+ " what you are doing."
+ "<br>Incautious editing of this file type may cause unexpected behaviour of"
+ " your system."
+ "<br><br>Are you sure you want to continue?</qt>"
+ ));
+
+ if (res != KMessageBox::Yes)
+ {
+ kdWarning() << "Editing of default fallback mime type prevented." << endl;
+ ::exit(0);
+ }
+
+ mime = KMimeType::defaultMimeTypePtr();
+ }
+
+ // The user has NOT explicitly requested it, so if KMimeType::mimeType(...)
+ // returns it, then it's safe to assume that the mimetype is incorrect.
+ else
+ {
+ mime = KMimeType::mimeType( arg );
+ if (mime == KMimeType::defaultMimeTypePtr())
+ {
+ KMessageBox::error(nullptr, i18n("Mimetype %1 not found!").arg(arg));
+ kdError() << "Mimetype " << arg << " not found" << endl;
+ ::exit(1);
+ }
+ }
}
FileTypeDialog dlg( mime, createType );
@@ -169,7 +202,7 @@ int main(int argc, char ** argv)
#endif
args->clear();
if ( !createType )
- dlg.setCaption( i18n("Edit File Type %1").arg(mime->name()) );
+ dlg.setCaption( i18n("Edit File Type %1").arg(mime->name()) );
else {
dlg.setCaption( i18n("Create New File Type %1").arg(mime->name()) );
dlg.enableButton( KDialogBase::Apply, true );