diff --git a/src/plugins/bineditor/bineditor.cpp b/src/plugins/bineditor/bineditor.cpp
index fbd2bb43be27f1fc9f5a9e0341d0d6164440db4c..ec33a8889e929d3b7ca972adcecbf3db0035042e 100644
--- a/src/plugins/bineditor/bineditor.cpp
+++ b/src/plugins/bineditor/bineditor.cpp
@@ -41,6 +41,7 @@
 #include <QtGui/QClipboard>
 #include <QtGui/QFontMetrics>
 #include <QtGui/QMenu>
+#include <QtGui/QMessageBox>
 #include <QtGui/QPainter>
 #include <QtGui/QScrollBar>
 #include <QtGui/QWheelEvent>
@@ -1124,7 +1125,13 @@ void BinEditor::copy(bool raw)
     const int selStart = selectionStart();
     const int selEnd = selectionEnd();
     if (selStart < selEnd) {
-        const QByteArray &data = dataMid(selStart, selEnd - selStart);
+        const int selectionLength = selEnd - selStart;
+        if (selectionLength >> 22) {
+            QMessageBox::warning(this, tr("Copying Failed"),
+                                 tr("You cannot copy more than 4 MB of binary data."));
+            return;
+        }
+        const QByteArray &data = dataMid(selStart, selectionLength);
         if (raw) {
             QApplication::clipboard()->setText(data);
             return;