diff -u -r vim73/src/fileio.c vim-glob-escape-fix/src/fileio.c
--- vim73/src/fileio.c	2010-08-14 08:20:54.000000000 -0400
+++ vim-glob-escape-fix/src/fileio.c	2013-06-02 11:32:08.295844736 -0400
@@ -10227,7 +10227,10 @@
 		 * foo\,bar -> foo,bar
 		 * foo\ bar -> foo bar
 		 * Don't unescape \, * and others that are also special in a
-		 * regexp. */
+		 * regexp.
+		 * An escaped { must be unescaped since we use magic not
+		 * verymagic.
+		 */
 		if (*++p == '?'
 #ifdef BACKSLASH_IN_FILENAME
 			&& no_bslash
@@ -10235,7 +10238,7 @@
 			)
 		    reg_pat[i++] = '?';
 		else
-		    if (*p == ',' || *p == '%' || *p == '#' || *p == ' ')
+		    if (*p == ',' || *p == '%' || *p == '#' || *p == ' ' || *p == '{')
 			reg_pat[i++] = *p;
 		    else
 		    {
diff -u -r vim73/src/misc1.c vim-glob-escape-fix/src/misc1.c
--- vim73/src/misc1.c	2010-08-15 07:24:05.000000000 -0400
+++ vim-glob-escape-fix/src/misc1.c	2013-06-02 11:33:42.447266538 -0400
@@ -3543,6 +3543,29 @@
 #endif
 
 /*
+ * Return true if the passed string contains an env_var, allowing for escaping
+ */
+    int
+has_env_var(p)
+    char_u *p;
+{
+    for ( ; *p; mb_ptr_adv(p))
+    {
+	if (*p == '\\' && p[1] != NUL)
+	    ++p;
+	else if (vim_strchr((char_u *)
+#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+				    "$%"
+#else
+				    "$"
+#endif
+					, *p) != NULL)
+	    return TRUE;
+    }
+    return FALSE;
+}
+
+/*
  * Call expand_env() and store the result in an allocated string.
  * This is not very memory efficient, this expects the result to be freed
  * again soon.
@@ -9748,7 +9771,7 @@
      */
     for (i = 0; i < num_pat; i++)
     {
-	if (vim_strpbrk(pat[i], (char_u *)SPECIAL_WILDCHAR) != NULL
+	if (mch_has_special_wildchar(pat[i])
 # ifdef VIM_BACKTICK
 		&& !(vim_backtick(pat[i]) && pat[i][1] == '=')
 # endif
@@ -9778,7 +9801,7 @@
 	    /*
 	     * First expand environment variables, "~/" and "~user/".
 	     */
-	    if (vim_strchr(p, '$') != NULL || *p == '~')
+	    if (has_env_var(p) || *p == '~')
 	    {
 		p = expand_env_save_opt(p, TRUE);
 		if (p == NULL)
@@ -9789,7 +9812,7 @@
 		 * variable, use the shell to do that.  Discard previously
 		 * found file names and start all over again.
 		 */
-		else if (vim_strchr(p, '$') != NULL || *p == '~')
+		else if (has_env_var(p) || *p == '~')
 		{
 		    vim_free(p);
 		    ga_clear_strings(&ga);
diff -u -r vim73/src/os_unix.c vim-glob-escape-fix/src/os_unix.c
--- vim73/src/os_unix.c	2010-08-08 09:14:04.000000000 -0400
+++ vim-glob-escape-fix/src/os_unix.c	2013-05-31 13:19:08.560756927 -0400
@@ -5843,6 +5843,19 @@
 }
 #endif
 
+    int
+mch_has_special_wildchar(p)
+    char_u  *p;
+{
+    for ( ; *p; mb_ptr_adv(p))
+    {
+	if (*p == '\\' && p[1] != NUL)
+	    ++p;
+	else if (vim_strchr((char_u *)SPECIAL_WILDCHAR, *p) != NULL)
+	    return TRUE;
+    }
+    return FALSE;
+}
 
 /*
  * Return TRUE if the string "p" contains a wildcard that mch_expandpath() can
