Commit: 8d064c5bc4cd0fb5577c58ba6f15d0040774354a
Author: Campbell Barton
Date:   Wed Jan 17 19:28:15 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB8d064c5bc4cd0fb5577c58ba6f15d0040774354a

Fix use-after free in DRW_shader_create_with_lib

Limit scope to avoid future accidents

===================================================================

M       source/blender/draw/intern/draw_manager.c

===================================================================

diff --git a/source/blender/draw/intern/draw_manager.c 
b/source/blender/draw/intern/draw_manager.c
index e2dc36deed4..1bbefe61b22 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -585,26 +585,30 @@ GPUShader *DRW_shader_create_with_lib(
        char *geom_with_lib = NULL;
        va_list args;
 
-       DynStr *ds_vert = BLI_dynstr_new();
-       va_start(args, defines);
-       BLI_dynstr_append(ds_vert, va_arg(args, char *));
-       va_end(args);
-       BLI_dynstr_append(ds_vert, vert);
-       vert_with_lib = BLI_dynstr_get_cstring(ds_vert);
-       BLI_dynstr_free(ds_vert);
-
-       DynStr *ds_frag = BLI_dynstr_new();
-       va_start(args, defines);
-       BLI_dynstr_append(ds_vert, va_arg(args, char *));
-       va_end(args);
-       BLI_dynstr_append(ds_frag, frag);
-       frag_with_lib = BLI_dynstr_get_cstring(ds_frag);
-       BLI_dynstr_free(ds_frag);
+       {
+               DynStr *ds_vert = BLI_dynstr_new();
+               va_start(args, defines);
+               BLI_dynstr_append(ds_vert, va_arg(args, char *));
+               va_end(args);
+               BLI_dynstr_append(ds_vert, vert);
+               vert_with_lib = BLI_dynstr_get_cstring(ds_vert);
+               BLI_dynstr_free(ds_vert);
+       }
+
+       {
+               DynStr *ds_frag = BLI_dynstr_new();
+               va_start(args, defines);
+               BLI_dynstr_append(ds_frag, va_arg(args, char *));
+               va_end(args);
+               BLI_dynstr_append(ds_frag, frag);
+               frag_with_lib = BLI_dynstr_get_cstring(ds_frag);
+               BLI_dynstr_free(ds_frag);
+       }
 
        if (geom) {
                DynStr *ds_geom = BLI_dynstr_new();
                va_start(args, defines);
-               BLI_dynstr_append(ds_vert, va_arg(args, char *));
+               BLI_dynstr_append(ds_geom, va_arg(args, char *));
                va_end(args);
                BLI_dynstr_append(ds_geom, geom);
                geom_with_lib = BLI_dynstr_get_cstring(ds_geom);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to