}
IMAGE_UTIL_SAFE_FREE(image_header);
+ IMAGE_UTIL_SAFE_G_FREE(_handle->path);
err = _image_util_decode_create_image_handle(_handle);
image_util_retvm_if((err != IMAGE_UTIL_ERROR_NONE), err, "_image_util_decode_create_image_handle failed");
_handle->path = g_strndup(path, strlen(path));
image_util_retvm_if(_handle->path == NULL, IMAGE_UTIL_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+ IMAGE_UTIL_SAFE_FREE(_handle->src_buffer);
+
return err;
}
IMAGE_UTIL_DECODE_HANDLE_CHECK(handle);
image_util_retvm_if((src_buffer == NULL || src_size < IMG_HEADER_LENGTH), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid input buffer");
- IMAGE_UTIL_SAFE_FREE(_handle->path);
-
err = _image_util_decode_check_image_type(src_buffer, &_handle->image_type);
image_util_retvm_if(err != IMAGE_UTIL_ERROR_NONE, err, "_image_util_decode_check_image_type failed");
err = _image_util_decode_create_image_handle(_handle);
image_util_retvm_if(err != IMAGE_UTIL_ERROR_NONE, err, "_image_util_decode_create_image_handle failed");
+ if (_handle->src_buffer)
+ IMAGE_UTIL_SAFE_FREE(_handle->src_buffer[0]);
IMAGE_UTIL_SAFE_FREE(_handle->src_buffer);
_handle->src_buffer = (void *)calloc(1, sizeof(void *));
image_util_retvm_if(_handle->src_buffer == NULL, IMAGE_UTIL_ERROR_OUT_OF_MEMORY, "The memory of input buffer was not allocated");
- _handle->src_buffer[0] = (void *)src_buffer;
+ _handle->src_buffer[0] = calloc(1, src_size);
+ if (!_handle->src_buffer[0]) {
+ image_util_error("The memory of input buffer was not allocated");
+ IMAGE_UTIL_SAFE_FREE(_handle->src_buffer);
+ return IMAGE_UTIL_ERROR_OUT_OF_MEMORY;
+ }
+
+ memcpy(_handle->src_buffer[0], src_buffer, src_size);
_handle->src_size = src_size;
+ IMAGE_UTIL_SAFE_G_FREE(_handle->path);
+
return err;
}
g_thread_join(_handle->thread);
IMAGE_UTIL_SAFE_FREE(_handle->_decode_cb);
}
- IMAGE_UTIL_SAFE_FREE(_handle->path);
+ IMAGE_UTIL_SAFE_G_FREE(_handle->path);
+ if (_handle->src_buffer)
+ IMAGE_UTIL_SAFE_FREE(_handle->src_buffer[0]);
IMAGE_UTIL_SAFE_FREE(_handle->src_buffer);
IMAGE_UTIL_SAFE_FREE(_handle);