diff options
Diffstat (limited to 'src/format.c')
-rw-r--r-- | src/format.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/src/format.c b/src/format.c index c0f0e13..75d6db2 100644 --- a/src/format.c +++ b/src/format.c @@ -2803,10 +2803,48 @@ static char * format_check_disallowed(const struct berval *bv, const char *disallowed) { int i; + unsigned char c; char *p; if (disallowed != NULL) { for (i = 0; disallowed[i] != '\0'; i++) { - p = memchr(bv->bv_val, disallowed[i], bv->bv_len); + c = disallowed[i]; + if (c == '\\') { + switch (disallowed[i + 1]) { + case '\\': + c = '\\'; + i++; + break; + case 'a': + c = '\a'; + i++; + break; + case 'b': + c = '\b'; + i++; + break; + case 'f': + c = '\f'; + i++; + break; + case 'n': + c = '\n'; + i++; + break; + case 'r': + c = '\r'; + i++; + break; + case 't': + c = '\t'; + i++; + break; + case 'v': + c = '\v'; + i++; + break; + } + } + p = memchr(bv->bv_val, c, bv->bv_len); if (p != NULL) { return p; } |