diff --git a/src/lib-managesieve/managesieve-url.c b/src/lib-managesieve/managesieve-url.c
index 9d7cdb8744b5cce3945202039d812facf633a42f..d2d7658611bcbdf523b03089eaf1c5dec7ded396 100644
--- a/src/lib-managesieve/managesieve-url.c
+++ b/src/lib-managesieve/managesieve-url.c
@@ -203,7 +203,8 @@ managesieve_url_parse_path_segment(struct managesieve_url_parser *url_parser,
 		if (*parser->cur == '%') {
 			unsigned char ch = 0;
 
-			if (segment != NULL) {
+			if (segment_r != NULL) {
+				i_assert(segment != NULL);
 				str_append_data(segment, offset,
 						parser->cur - offset);
 			}
@@ -213,8 +214,10 @@ managesieve_url_parse_path_segment(struct managesieve_url_parser *url_parser,
 				return -1;
 			i_assert(ret > 0);
 
-			if (segment != NULL)
+			if (segment_r != NULL) {
+				i_assert(segment != NULL);
 				str_append_c(segment, ch);
+			}
 			offset = parser->cur;
 			continue;
 		}
@@ -223,8 +226,10 @@ managesieve_url_parse_path_segment(struct managesieve_url_parser *url_parser,
 			break;
 		parser->cur++;
 	}
-	if (segment != NULL)
+	if (segment_r != NULL) {
+		i_assert(segment != NULL);
 		str_append_data(segment, offset, parser->cur - offset);
+	}
 
 	if (parser->cur < parser->end && *parser->cur != '/' &&
 	    *parser->cur != '?' && *parser->cur != '#') {
@@ -237,8 +242,10 @@ managesieve_url_parse_path_segment(struct managesieve_url_parser *url_parser,
 	if (first == parser->cur)
 		return 0;
 
-	if (segment != NULL)
+	if (segment_r != NULL) {
+		i_assert(segment != NULL);
 		*segment_r = p_strdup(parser->pool, str_c(segment));
+	}
 	return 1;
 }