From 473c93845c19e86ddc5fd4015de4027479877d3a Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Wed, 23 Jul 2008 18:53:22 +0200
Subject: [PATCH] Fixed bug introduced by previous change.

---
 src/lib-sieve/sieve-binary.c | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/lib-sieve/sieve-binary.c b/src/lib-sieve/sieve-binary.c
index afa3b8e61..d08010214 100644
--- a/src/lib-sieve/sieve-binary.c
+++ b/src/lib-sieve/sieve-binary.c
@@ -52,7 +52,8 @@ static struct sieve_binary_block *sieve_binary_load_block
 	(struct sieve_binary *sbin, unsigned int id);
 
 static inline struct sieve_binary_extension_reg *sieve_binary_extension_get_reg
-	(struct sieve_binary *sbin, const struct sieve_extension *ext);
+	(struct sieve_binary *sbin, const struct sieve_extension *ext, 
+		bool create);
 static inline int sieve_binary_extension_register
 	(struct sieve_binary *sbin, const struct sieve_extension *ext, 
 		struct sieve_binary_extension_reg **reg);
@@ -1227,7 +1228,7 @@ static inline struct sieve_binary_extension_reg *
 }
 
 static inline struct sieve_binary_extension_reg *sieve_binary_extension_get_reg 
-(struct sieve_binary *sbin, const struct sieve_extension *ext) 
+(struct sieve_binary *sbin, const struct sieve_extension *ext, bool create) 
 {
 	int ext_id = *ext->id;
 	struct sieve_binary_extension_reg *reg = NULL;
@@ -1240,7 +1241,7 @@ static inline struct sieve_binary_extension_reg *sieve_binary_extension_get_reg
 	}
 
 	/* Register if not known */
-	if ( reg == NULL )
+	if ( reg == NULL && create )
 		return sieve_binary_extension_create_reg(sbin, ext);
 
 	return reg;
@@ -1250,7 +1251,7 @@ void sieve_binary_extension_set_context
 (struct sieve_binary *sbin, const struct sieve_extension *ext, void *context)
 {
 	struct sieve_binary_extension_reg *ereg = 
-		sieve_binary_extension_get_reg(sbin, ext);
+		sieve_binary_extension_get_reg(sbin, ext, TRUE);
 	
 	ereg->context = context;
 }
@@ -1259,7 +1260,7 @@ const void *sieve_binary_extension_get_context
 	(struct sieve_binary *sbin, const struct sieve_extension *ext) 
 {
 	struct sieve_binary_extension_reg *ereg = 
-		sieve_binary_extension_get_reg(sbin, ext);
+		sieve_binary_extension_get_reg(sbin, ext, TRUE);
 
 	if ( ereg != NULL ) {
 		return ereg->context;
@@ -1273,7 +1274,7 @@ void sieve_binary_extension_set
 	const struct sieve_binary_extension *bext)
 {
 	struct sieve_binary_extension_reg *ereg = 
-		sieve_binary_extension_get_reg(sbin, ext);
+		sieve_binary_extension_get_reg(sbin, ext, TRUE);
 	
 	ereg->binext = bext;
 }
@@ -1284,7 +1285,7 @@ unsigned int sieve_binary_extension_create_block
 	struct sieve_binary_block *block;	
 	unsigned int block_id;
 	struct sieve_binary_extension_reg *ereg = 
-		sieve_binary_extension_get_reg(sbin, ext);
+		sieve_binary_extension_get_reg(sbin, ext, TRUE);
 	
 	block = p_new(sbin->pool, struct sieve_binary_block, 1);
 	block->buffer = buffer_create_dynamic(sbin->pool, 64);
@@ -1302,7 +1303,7 @@ unsigned int sieve_binary_extension_get_block
 (struct sieve_binary *sbin, const struct sieve_extension *ext)
 {
 	struct sieve_binary_extension_reg *ereg = 
-		sieve_binary_extension_get_reg(sbin, ext);
+		sieve_binary_extension_get_reg(sbin, ext, TRUE);
 		
 	return ereg->block_id;
 }
@@ -1311,7 +1312,7 @@ static inline int sieve_binary_extension_register
 (struct sieve_binary *sbin, const struct sieve_extension *ext, 
 	struct sieve_binary_extension_reg **reg_r) 
 {
-	if ( sieve_binary_extension_get_index(sbin, ext) == -1 ) {
+	if ( sieve_binary_extension_get_reg(sbin, ext, FALSE) == NULL ) {
 		struct sieve_binary_extension_reg *ereg = 
 			sieve_binary_extension_create_reg(sbin, ext);
 		
@@ -1354,9 +1355,9 @@ int sieve_binary_extension_get_index
 	(struct sieve_binary *sbin, const struct sieve_extension *ext) 
 {
 	struct sieve_binary_extension_reg *ereg =
-		sieve_binary_extension_get_reg(sbin, ext);
+		sieve_binary_extension_get_reg(sbin, ext, FALSE);
 	
-	return ereg->index;
+	return ( ereg == NULL ? -1 : ereg->index );
 }
 
 int sieve_binary_extensions_count(struct sieve_binary *sbin) 
@@ -1515,7 +1516,7 @@ sieve_size_t sieve_binary_emit_extension
 {
 	sieve_size_t address = _sieve_binary_get_code_size(sbin);
 	struct sieve_binary_extension_reg *ereg = 
-		sieve_binary_extension_get_reg(sbin, ext);
+		sieve_binary_extension_get_reg(sbin, ext, TRUE);
 
    	_sieve_binary_emit_byte(sbin, offset + ereg->index);
 	return address;
-- 
GitLab