aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/generator.c
diff options
context:
space:
mode:
authorJan Hutter <jhutter@hsr.ch>2005-11-10 09:31:07 +0000
committerJan Hutter <jhutter@hsr.ch>2005-11-10 09:31:07 +0000
commitc7748338f2f83bdc0b19894366de668c22f74e7c (patch)
tree4ad26632e5b4c7cf56be9964bfaf5ebfad8533f4 /Source/charon/generator.c
parent67a57dc6f4f0eaec37e9e4b71be91595d1c5d2ac (diff)
downloadstrongswan-c7748338f2f83bdc0b19894366de668c22f74e7c.tar.bz2
strongswan-c7748338f2f83bdc0b19894366de668c22f74e7c.tar.xz
- fixed bug in memory reallocation
Diffstat (limited to 'Source/charon/generator.c')
-rw-r--r--Source/charon/generator.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/Source/charon/generator.c b/Source/charon/generator.c
index 5d852c50b..14419ff43 100644
--- a/Source/charon/generator.c
+++ b/Source/charon/generator.c
@@ -1,7 +1,7 @@
/**
* @file generator.c
*
- * @brief Generic generator class used to generate IKEv2-Header and Payload
+ * @brief Generic generator class used to generate IKEv2-header and payloads.
*
*/
@@ -22,6 +22,7 @@
#include <stdlib.h>
#include <string.h>
+#include <arpa/inet.h>
#include "allocator.h"
#include "types.h"
@@ -29,7 +30,7 @@
/**
- * buffer_t: used for geneartor operations
+ * Uused for geneartor operations
*/
typedef struct generator_infos_s generator_infos_t;
@@ -88,15 +89,13 @@ struct generator_infos_s {
*/
static status_t generator_info_make_space_available (generator_infos_t *this, size_t bits)
{
- size_t free_bits = ((this->roof_position - this->out_position) * 8) - this->current_bit;
-
- while (free_bits < bits)
+ while ((((this->roof_position - this->out_position) * 8) - this->current_bit) < bits)
{
size_t old_buffer_size = ((this->roof_position) - ( this->buffer));
size_t new_buffer_size = old_buffer_size + GENERATOR_DATA_BUFFER_INCREASE_VALUE;
size_t out_position_offset = ((this->out_position) - (this->buffer));
u_int8_t *new_buffer;
-
+
new_buffer = allocator_realloc(this->buffer,new_buffer_size);
if (new_buffer == NULL)
{
@@ -107,8 +106,9 @@ static status_t generator_info_make_space_available (generator_infos_t *this, si
this->out_position = (this->buffer + out_position_offset);
this->roof_position = (this->buffer + new_buffer_size);
+
}
-
+
return SUCCESS;
}
@@ -383,22 +383,23 @@ static status_t generate (private_generator_t *this,void * data_struct,encoding_
break;
case RESERVED_BIT:
{
+ status = infos->make_space_available(infos,1);
u_int8_t reserved_bit = ~(1 << (7 - infos->current_bit));
-
+
*(infos->out_position) = *(infos->out_position) & reserved_bit;
infos->current_bit++;
if (infos->current_bit >= 8)
{
infos->current_bit = infos->current_bit % 8;
- status = infos->make_space_available(infos,8);
infos->out_position++;
}
break;
}
case RESERVED_BYTE:
{
- if (infos->current_bit > 0)
+ status = infos->make_space_available(infos,8);
+ if ((status != SUCCESS) || (infos->current_bit > 0))
{
return FAILED;
}