diff --git a/src/common.h b/src/common.h index 238af79..18390f3 100644 --- a/src/common.h +++ b/src/common.h @@ -116,6 +116,7 @@ void *memrchr( const void *s, int c, size_t n ); #endif int starts_with( const char *str, int strl, const char *cmp, int cmpl ); +int starts_with_upper( const char *str, int strl, const char *cmp, int cmpl ); int equals( const char *str, int strl, const char *cmp, int cmpl ); #ifndef HAVE_TIMEGM diff --git a/src/drv_imap.c b/src/drv_imap.c index a0c13e0..608a2d3 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -967,7 +967,7 @@ parse_fetch_rsp( imap_store_t *ctx, list_t *list, char *s ATTR_UNUSED ) tmp = tmp->next; if (!is_atom( tmp )) goto bfail; - if (starts_with( tmp->val, tmp->len, "X-TUID: ", 8 )) + if (starts_with_upper( tmp->val, tmp->len, "X-TUID: ", 8 )) tuid = tmp->val + 8; } else { bfail: diff --git a/src/sync.c b/src/sync.c index eb444e0..4fb2026 100644 --- a/src/sync.c +++ b/src/sync.c @@ -338,7 +338,7 @@ msg_fetched( int sts, void *aux ) if (c == '\r') lcrs++; else if (c == '\n') { - if (starts_with( fmap + start, len - start, "X-TUID: ", 8 )) { + if (starts_with_upper( fmap + start, len - start, "X-TUID: ", 8 )) { extra = (sbreak = start) - (ebreak = i); goto oke; } diff --git a/src/util.c b/src/util.c index 6851c6f..f05eec6 100644 --- a/src/util.c +++ b/src/util.c @@ -27,6 +27,7 @@ #include #include #include +#include #include static int need_nl; @@ -241,6 +242,21 @@ starts_with( const char *str, int strl, const char *cmp, int cmpl ) return (strl >= cmpl) && !memcmp( str, cmp, cmpl ); } +int +starts_with_upper( const char *str, int strl, const char *cmp, int cmpl ) +{ + int i; + + if (strl < 0) + strl = strnlen( str, cmpl + 1 ); + if (strl < cmpl) + return 0; + for (i = 0; i < cmpl; i++) + if (str[i] != cmp[i] && toupper( str[i] ) != cmp[i]) + return 0; + return 1; +} + int equals( const char *str, int strl, const char *cmp, int cmpl ) {