$OpenBSD: patch-src_core_misc_c,v 1.1 2011/11/16 10:16:57 sthen Exp $
--- src/core/misc.c.orig	Sun Nov  6 04:51:36 2011
+++ src/core/misc.c	Sun Nov  6 04:51:50 2011
@@ -756,17 +756,22 @@ int expand_escape(const char **data)
                 /* control character (\cA = ^A) */
                 (*data)++;
 		return i_toupper(**data) - 64;
-	default:
-		if (!i_isdigit(**data))
-			return -1;
-
+	case '0': case '1': case '2': case '3':
+	case '4': case '5': case '6': case '7':
                 /* octal */
+		digit[1] = digit[2] = digit[3] = '\0';
                 digit[0] = (*data)[0];
-                digit[1] = (*data)[1];
-		digit[2] = (*data)[2];
-                digit[3] = '\0';
-		*data += 2;
+		if ((*data)[1] >= '0' && (*data)[1] <= '7') {
+			++*data;
+			digit[1] = **data;
+			if ((*data)[1] >= '0' && (*data)[1] <= '7') {
+				++*data;
+				digit[2] = **data;
+			}
+		}
 		return strtol(digit, NULL, 8);
+	default:
+		return -1;
 	}
 }
 
@@ -942,4 +947,22 @@ int parse_size(const char *size, int *bytes)
 	}
 
 	return TRUE;
+}
+
+char *ascii_strup(char *str)
+{
+	char *s;
+
+	for (s = str; *s; s++)
+		*s = g_ascii_toupper (*s);
+	return str;
+}
+
+char *ascii_strdown(char *str)
+{
+	char *s;
+
+	for (s = str; *s; s++)
+		*s = g_ascii_tolower (*s);
+	return str;
 }
