Fix use-after free in DRW_shader_create_with_lib

Limit scope to avoid future accidents
This commit is contained in:
Campbell Barton 2018-01-17 19:28:15 +11:00
parent c02d428147
commit 8d064c5bc4
1 changed files with 19 additions and 15 deletions

View File

@ -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_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_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);