diff --git a/src/lib-sieve/ext-encoded-character.c b/src/lib-sieve/ext-encoded-character.c
index 34af68f418362effcc7a369ead9894f6cc32487d..01ebd29bc37472cff53d7fbca2379e57d4ca7d38 100644
--- a/src/lib-sieve/ext-encoded-character.c
+++ b/src/lib-sieve/ext-encoded-character.c
@@ -134,8 +134,7 @@ static bool _decode_unicode
 
 		if ( !_parse_hexint(in, inend, 0, &unicode_hex) ) break;
 
-		if ( (unicode_hex <= 0xD7FF) ||
-			(unicode_hex >= 0xE000 && unicode_hex <= 0x10FFFF)	)
+		if ( uni_is_valid_ucs4((unichar_t) unicode_hex) )
 			uni_ucs4_to_utf8_c((unichar_t) unicode_hex, result);
 		else {
 			if ( valid ) *error_hex = unicode_hex;