diff -r 7532963bd15b -r 80d273229f24 libidav/davqlparser.c --- a/libidav/davqlparser.c Tue Jun 02 21:03:58 2015 +0200 +++ b/libidav/davqlparser.c Wed Jun 03 11:47:38 2015 +0200 @@ -515,11 +515,18 @@ // quoted strings / identifiers are a single token if (src.ptr[i] == '\'' || src.ptr[i] == '`') { if (src.ptr[i] == insequence) { - // add quoted token to list - token->value.length++; - tokens = dav_parse_add_token(tokens, token); - token = NULL; - insequence = '\0'; + // lookahead for escaped string quotes + if (src.ptr[i] == '\'' && i+2 < src.length && + src.ptr[i+1] == src.ptr[i] && src.ptr[i+2] == src.ptr[i]) { + token->value.length += 3; + i += 2; + } else { + // add quoted token to list + token->value.length++; + tokens = dav_parse_add_token(tokens, token); + token = NULL; + insequence = '\0'; + } } else if (insequence == '\0') { insequence = src.ptr[i]; // always create new token for quoted strings