diff --git a/src/post_modules/GTK2/source/gladexml.pre b/src/post_modules/GTK2/source/gladexml.pre
index 817317e76789dcf04c6209975c803e3c758536c4..7b774e1ab65d17eb5fa6fc646161453d0440cd12 100644
--- a/src/post_modules/GTK2/source/gladexml.pre
+++ b/src/post_modules/GTK2/source/gladexml.pre
@@ -93,10 +93,10 @@ void create(string filename_or_buffer, ?int size, ?string root, ?string domain)
     struct pike_string *fname;
     char *root=NULL,*dom=NULL;
     INT_TYPE size=0;
-    get_all_args("create",args,"%t.%i%s%s",&fname,&size,&root,&dom);
+    get_all_args("create",args,"%n.%i%s%s",&fname,&size,&root,&dom);
     if (size==0)
       gl=glade_xml_new(fname->str,root,dom);
-    else if (size==-1)
+    else if ((size < 0) || (size > fname->len))
       gl=glade_xml_new_from_buffer(fname->str,fname->len,root,dom);
     else
       gl=glade_xml_new_from_buffer(fname->str,size,root,dom);