From b9be8e3801bc214e442f5adc130be30eb633a4b4 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Fri, 30 Jul 2010 19:03:30 +0200
Subject: [PATCH] Sieve binary: now using better defined integer types for
 byte-coded data

---
 .../plugins/variables/ext-variables-common.c  |  4 +--
 src/lib-sieve/sieve-binary-code.c             | 30 +++++++++----------
 src/lib-sieve/sieve-binary.h                  |  6 ++--
 src/lib-sieve/sieve-code.c                    |  6 ++--
 src/lib-sieve/sieve-interpreter.c             |  2 +-
 src/testsuite/cmd-test-fail.c                 |  2 +-
 6 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/src/lib-sieve/plugins/variables/ext-variables-common.c b/src/lib-sieve/plugins/variables/ext-variables-common.c
index b1843124b..ac9fb55e8 100644
--- a/src/lib-sieve/plugins/variables/ext-variables-common.c
+++ b/src/lib-sieve/plugins/variables/ext-variables-common.c
@@ -240,7 +240,7 @@ struct sieve_variable_scope *sieve_variable_scope_binary_dump
 	struct sieve_variable_scope *local_scope;
 	unsigned int i, scope_size;
 	sieve_size_t pc;
-	int end_offset;
+	sieve_offset_t end_offset;
 
 	/* Read scope size */	
 	sieve_code_mark(denv);
@@ -310,7 +310,7 @@ struct sieve_variable_scope_binary *sieve_variable_scope_binary_read
 	const char *ext_name = 
 		( ext == NULL ? "variables" : sieve_extension_name(ext) );
 	sieve_size_t pc;
-	int end_offset;
+	sieve_offset_t end_offset;
 
 	/* Read scope size */	
 	if ( !sieve_binary_read_unsigned(sblock, address, &scope_size) ) {
diff --git a/src/lib-sieve/sieve-binary-code.c b/src/lib-sieve/sieve-binary-code.c
index 1f1052a46..c09532ce5 100644
--- a/src/lib-sieve/sieve-binary-code.c
+++ b/src/lib-sieve/sieve-binary-code.c
@@ -38,7 +38,7 @@ static inline void _sieve_binary_emit_data
 }
 
 static inline void _sieve_binary_emit_byte
-(struct sieve_binary_block *sblock, unsigned char byte)
+(struct sieve_binary_block *sblock, uint8_t byte)
 {
 	_sieve_binary_emit_data(sblock, &byte, 1);
 }
@@ -61,7 +61,7 @@ sieve_size_t sieve_binary_emit_data
 }
 
 sieve_size_t sieve_binary_emit_byte
-(struct sieve_binary_block *sblock, unsigned char byte) 
+(struct sieve_binary_block *sblock, uint8_t byte) 
 {
 	sieve_size_t address = _sieve_binary_block_get_size(sblock);
 
@@ -80,13 +80,13 @@ void sieve_binary_update_data
 /* Offset emission functions */
 
 sieve_size_t sieve_binary_emit_offset
-(struct sieve_binary_block *sblock, int offset) 
+(struct sieve_binary_block *sblock, sieve_offset_t offset) 
 {
 	int i;
 	sieve_size_t address = _sieve_binary_block_get_size(sblock);
 
 	for ( i = 3; i >= 0; i-- ) {
-		char c = (char) (offset >> (i * 8));
+		uint8_t c = (uint8_t) (offset >> (i * 8));
 		_sieve_binary_emit_data(sblock, &c, 1);
 	}
 	
@@ -97,10 +97,10 @@ void sieve_binary_resolve_offset
 (struct sieve_binary_block *sblock, sieve_size_t address) 
 {
 	int i;
-	int offset = _sieve_binary_block_get_size(sblock) - address; 
+	sieve_offset_t offset = _sieve_binary_block_get_size(sblock) - address; 
 	
 	for ( i = 3; i >= 0; i-- ) {
-		char c = (char) (offset >> (i * 8));	
+		uint8_t c = (uint8_t) (offset >> (i * 8));	
 		_sieve_binary_update_data(sblock, address + 3 - i, &c, 1);
 	}
 }
@@ -112,7 +112,7 @@ sieve_size_t sieve_binary_emit_integer
 {
 	sieve_size_t address = _sieve_binary_block_get_size(sblock);
 	int i;
-	char buffer[sizeof(sieve_number_t) + 1];
+	uint8_t buffer[sizeof(sieve_number_t) + 1];
 	int bufpos = sizeof(buffer) - 1;
   
 	buffer[bufpos] = integer & 0x7F;
@@ -201,14 +201,14 @@ void sieve_binary_emit_extension_object
 
 #define ADDR_CODE_READ(block) \
 	size_t _code_size; \
-	const signed char *_code = buffer_get_data((block)->data, &_code_size)
+	const int8_t *_code = buffer_get_data((block)->data, &_code_size)
  
 #define ADDR_CODE_AT(address) \
-	((signed char) (_code[*address]))
+	((int8_t) (_code[*address]))
 #define ADDR_DATA_AT(address) \
-	((unsigned char) (_code[*address]))
+	((uint8_t) (_code[*address]))
 #define ADDR_POINTER(address) \
-	((const char *) (&_code[*address]))
+	((const int8_t *) (&_code[*address]))
 
 #define ADDR_BYTES_LEFT(address) \
 	((_code_size) - (*address))
@@ -253,9 +253,9 @@ bool sieve_binary_read_code
 
 
 bool sieve_binary_read_offset
-(struct sieve_binary_block *sblock, sieve_size_t *address, int *offset_r) 
+(struct sieve_binary_block *sblock, sieve_size_t *address, sieve_offset_t *offset_r) 
 {
-	uint32_t offs = 0;
+	sieve_offset_t offs = 0;
 	ADDR_CODE_READ(sblock);
 	
 	if ( ADDR_BYTES_LEFT(address) >= 4 ) {
@@ -267,7 +267,7 @@ bool sieve_binary_read_offset
 		}
 	  
 		if ( offset_r != NULL )
-			*offset_r = (int) offs;
+			*offset_r = offs;
 			
 		return TRUE;
 	}
@@ -320,7 +320,7 @@ bool sieve_binary_read_string
 		return FALSE;
  
  	if ( str_r != NULL )  
-		*str_r = t_str_new_const(ADDR_POINTER(address), strlen);
+		*str_r = t_str_new_const((const char *) ADDR_POINTER(address), strlen);
 	ADDR_JUMP(address, strlen);
 	
 	if ( ADDR_CODE_AT(address) != 0 )
diff --git a/src/lib-sieve/sieve-binary.h b/src/lib-sieve/sieve-binary.h
index 877799c39..ae3b93314 100644
--- a/src/lib-sieve/sieve-binary.h
+++ b/src/lib-sieve/sieve-binary.h
@@ -148,7 +148,7 @@ int sieve_binary_extensions_count(struct sieve_binary *sbin);
 sieve_size_t sieve_binary_emit_data
 	(struct sieve_binary_block *sblock, const void *data, sieve_size_t size);
 sieve_size_t sieve_binary_emit_byte
-	(struct sieve_binary_block *sblock, unsigned char byte);
+	(struct sieve_binary_block *sblock, uint8_t byte);
 void sieve_binary_update_data
 	(struct sieve_binary_block *sblock, sieve_size_t address, const void *data, 
 		sieve_size_t size);
@@ -156,7 +156,7 @@ void sieve_binary_update_data
 /* Offset emission functions */
 
 sieve_size_t sieve_binary_emit_offset
-	(struct sieve_binary_block *sblock, int offset);
+	(struct sieve_binary_block *sblock, sieve_offset_t offset);
 void sieve_binary_resolve_offset
 	(struct sieve_binary_block *sblock, sieve_size_t address);
 
@@ -198,7 +198,7 @@ bool sieve_binary_read_code
 		signed int *code_r);
 bool sieve_binary_read_offset
 	(struct sieve_binary_block *sblock, sieve_size_t *address,
-		int *offset_r);
+		sieve_offset_t *offset_r);
 bool sieve_binary_read_integer
   (struct sieve_binary_block *sblock, sieve_size_t *address, 
 		sieve_number_t *int_r); 
diff --git a/src/lib-sieve/sieve-code.c b/src/lib-sieve/sieve-code.c
index 320a49f88..fb81d13ec 100644
--- a/src/lib-sieve/sieve-code.c
+++ b/src/lib-sieve/sieve-code.c
@@ -765,7 +765,7 @@ static bool opr_stringlist_dump
 	sieve_size_t pc = *address;
 	sieve_size_t end; 
 	unsigned int length = 0; 
- 	int end_offset;
+ 	sieve_offset_t end_offset;
 
 	if ( !sieve_binary_read_offset(denv->sblock, address, &end_offset) )
 		return FALSE;
@@ -785,7 +785,7 @@ static struct sieve_stringlist *opr_stringlist_read
 	sieve_size_t pc = *address;
 	sieve_size_t end; 
 	unsigned int length = 0;  
-	int end_offset;
+	sieve_offset_t end_offset;
 	
 	if ( !sieve_binary_read_offset(renv->sblock, address, &end_offset) )
 		return NULL;
@@ -1022,7 +1022,7 @@ static bool opc_jmp_dump
 {
 	const struct sieve_operation *oprtn = denv->oprtn;
 	unsigned int pc = *address;
-	int offset;
+	sieve_offset_t offset;
 	
 	if ( sieve_binary_read_offset(denv->sblock, address, &offset) ) 
 		sieve_code_dumpf(denv, "%s %d [%08x]", 
diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c
index 3b2c9a074..6f7c4ff16 100644
--- a/src/lib-sieve/sieve-interpreter.c
+++ b/src/lib-sieve/sieve-interpreter.c
@@ -413,7 +413,7 @@ int sieve_interpreter_program_jump
 	const struct sieve_runtime_env *renv = &interp->runenv;
 	sieve_size_t *address = &(interp->runenv.pc);
 	sieve_size_t jmp_start = *address;
-	int jmp_offset;
+	sieve_offset_t jmp_offset;
 	
 	if ( !sieve_binary_read_offset(renv->sblock, address, &jmp_offset) )
 	{
diff --git a/src/testsuite/cmd-test-fail.c b/src/testsuite/cmd-test-fail.c
index e5921ed31..2ee26f3a9 100644
--- a/src/testsuite/cmd-test-fail.c
+++ b/src/testsuite/cmd-test-fail.c
@@ -105,7 +105,7 @@ static bool cmd_test_fail_operation_dump
 (const struct sieve_dumptime_env *denv, sieve_size_t *address)
 {
 	unsigned int pc;
-	int offset;
+	sieve_offset_t offset;
     
 	sieve_code_dumpf(denv, "TEST_FAIL:");
 	sieve_code_descend(denv);
-- 
GitLab