diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c
index 554a024a5177847219044509faa1f32e77e99733..09a67e95604f6f0fd1e05d1a2f28352198c9f93b 100644
--- a/src/lib-sieve/sieve-validator.c
+++ b/src/lib-sieve/sieve-validator.c
@@ -573,6 +573,9 @@ bool sieve_validator_extension_loaded
 	int ext_id = SIEVE_EXT_ID(ext);
 	const struct sieve_validator_extension_reg *reg;
 
+	if ( ext_id < 0 || ext_id >= (int) array_count(&valdtr->extensions))
+		return FALSE;
+
 	reg = array_idx(&valdtr->extensions, (unsigned int) ext_id);
 
 	return ( reg->loaded );