[PATCH vkd3d v5 5/8] vkd3d-shader/hlsl: Properly free parse_variable_def memory.
Giovanni Mascellani
gmascellani at codeweavers.com
Mon Mar 14 08:03:02 CDT 2022
Hi,
Il 10/03/22 16:14, Francisco Casas ha scritto:
> Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
> Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
>
> ---
> v5:
> - No changes from v4.
>
> Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
> ---
> libs/vkd3d-shader/hlsl.y | 32 ++++++++++++++++++++++----------
> 1 file changed, 22 insertions(+), 10 deletions(-)
>
> diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
> index 34b4a8bb..bbdc1493 100644
> --- a/libs/vkd3d-shader/hlsl.y
> +++ b/libs/vkd3d-shader/hlsl.y
> @@ -668,6 +668,15 @@ static struct hlsl_type *apply_type_modifiers(struct hlsl_ctx *ctx, struct hlsl_
> return new_type;
> }
>
> +static void free_parse_variable_def(struct parse_variable_def *v)
> +{
> + free_parse_initializer(&v->initializer);
> + vkd3d_free(v->arrays.sizes);
> + vkd3d_free(v->name);
> + vkd3d_free((void *)v->semantic.name);
> + vkd3d_free(v);
> +}
> +
> static struct list *gen_struct_fields(struct hlsl_ctx *ctx, struct hlsl_type *type, struct list *fields)
> {
> struct parse_variable_def *v, *v_next;
> @@ -685,13 +694,14 @@ static struct list *gen_struct_fields(struct hlsl_ctx *ctx, struct hlsl_type *ty
>
> if (!(field = hlsl_alloc(ctx, sizeof(*field))))
> {
> - vkd3d_free(v);
> + free_parse_variable_def(v);
> return list;
> }
I guess it's better than nothing, but you're still leaking stuff for
later entries in "fields", aren't you?
> field->type = type;
> for (i = 0; i < v->arrays.count; ++i)
> field->type = hlsl_new_array_type(ctx, field->type, v->arrays.sizes[i]);
> + vkd3d_free(v->arrays.sizes);
> field->loc = v->loc;
> field->name = v->name;
> field->semantic = v->semantic;
> @@ -719,7 +729,10 @@ static bool add_typedef(struct hlsl_ctx *ctx, DWORD modifiers, struct hlsl_type
> if (!v->arrays.count)
> {
> if (!(type = hlsl_type_clone(ctx, orig_type, 0, modifiers)))
> + {
> + free_parse_variable_def(v);
> return false;
> + }
And here too.
Thanks, Giovanni.
More information about the wine-devel
mailing list