[Spice-devel] [RFC] [PATCH spice-gtk 4/4] DND: Set a maximum allowed file size

Dunrong Huang riegamaths at gmail.com
Mon Nov 5 01:01:18 PST 2012


Because of some technological reason, e.g. a progress bar that allows
user to cancels file transfer has not been done. We have to specify a
maximum allowed file size so file content will not consume too much memory.

Signed-off-by: Dunrong Huang <riegamaths at gmail.com>
---
 gtk/spice-dnd.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/gtk/spice-dnd.c b/gtk/spice-dnd.c
index 3593c9d..6374b2b 100644
--- a/gtk/spice-dnd.c
+++ b/gtk/spice-dnd.c
@@ -30,6 +30,23 @@
 #include "spice-widget-priv.h"
 #include "glib-compat.h"
 
+#define DND_MAX_FILE_SIZE 100 * 1024 * 1024 /* maximum allowed file size */
+
+static void spice_dnd_file_too_large(GtkWidget *parent)
+{
+    GtkWidget *dialog = gtk_message_dialog_new(
+        GTK_WINDOW(parent), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO,
+        GTK_BUTTONS_OK, NULL);
+    gtk_window_set_title(GTK_WINDOW(dialog), "GtkMessageDialog");
+    gtk_message_dialog_format_secondary_text(
+        GTK_MESSAGE_DIALOG(dialog),
+        "File size exceeds maximum allowed value(%dM)",
+        DND_MAX_FILE_SIZE / 1024 / 1024);
+
+    gtk_dialog_run(GTK_DIALOG(dialog));
+    gtk_widget_destroy(dialog);
+}
+
 void spice_dnd_process(SpiceDisplay *display, const char *file_path)
 {
 #define DND_CHUNK_SIZE 1600
@@ -60,6 +77,11 @@ void spice_dnd_process(SpiceDisplay *display, const char *file_path)
         return ;
     }
 
+    if (st.st_size > DND_MAX_FILE_SIZE) {
+        spice_dnd_file_too_large(gtk_widget_get_toplevel(GTK_WIDGET(display)));
+        return ;
+    }
+
     /* Get file basename */
     file_name = strrchr(file_path, '/');
     if (file_name) {
-- 
1.7.12.4



More information about the Spice-devel mailing list