Avoid a memory leak when deserializing variables of type Buffer

This commit is contained in:
Pierre Pronchery 2014-04-19 22:20:10 +02:00
parent d4c9b21700
commit 405e1f35cc

View File

@ -253,6 +253,7 @@ Variable * variable_new_deserialize_buffer(size_t * size, Buffer const * buffer)
Variable * variable_new_deserialize_type(VariableType type, size_t * size, Variable * variable_new_deserialize_type(VariableType type, size_t * size,
char const * data) char const * data)
{ {
Variable * v;
size_t s; size_t s;
uint8_t u8; uint8_t u8;
int16_t i16; int16_t i16;
@ -261,6 +262,7 @@ Variable * variable_new_deserialize_type(VariableType type, size_t * size,
int64_t i64; int64_t i64;
float f; float f;
double d; double d;
Buffer * b = NULL;
void * p = (char *)data; void * p = (char *)data;
#ifdef DEBUG #ifdef DEBUG
@ -373,16 +375,20 @@ Variable * variable_new_deserialize_type(VariableType type, size_t * size,
case VT_INT64: case VT_INT64:
case VT_UINT64: case VT_UINT64:
case VT_BUFFER: case VT_BUFFER:
if((p = buffer_new(s - sizeof(u32), &data[sizeof(u32)])) if((b = buffer_new(s - sizeof(u32), &data[sizeof(u32)]))
== NULL) == NULL)
return NULL; return NULL;
p = b;
break; break;
default: default:
error_set_code(1, "Unable to deserialize type %u", error_set_code(1, "Unable to deserialize type %u",
type); type);
return NULL; return NULL;
} }
return variable_new(type, p); v = variable_new(type, p);
if(b != NULL)
buffer_delete(b);
return v;
} }