Module: Mesa Branch: main Commit: 7e613d2a32ba88ccae797927795a30095db11aff URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7e613d2a32ba88ccae797927795a30095db11aff
Author: Patrick Lerda <[email protected]> Date: Sat Feb 25 14:08:53 2023 +0100 mesa/shaderapi: fix path memory leak For instance, with "piglit/arb_shading_language_include-api -auto -fbo" or "piglit/shader_runner tests/spec/arb_shading_language_include/execution/replacement.shader_test -auto -fbo": Direct leak of 66 byte(s) in 6 object(s) allocated from: #0 0x7fa4b59050 in __interceptor_strdup (/usr/lib64/libasan.so.6+0x59050) #1 0x7f9a098fe0 in validate_and_tokenise_sh_incl ../src/mesa/main/shaderapi.c:3383 #2 0x7f9a0a43e8 in _mesa_NamedStringARB ../src/mesa/main/shaderapi.c:3547 Signed-off-by: Patrick Lerda <[email protected]> Reviewed-by: Marek Olšák <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21553> --- src/mesa/main/shaderapi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 50085ef7e2f..5e1f11238e1 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -3294,6 +3294,7 @@ destroy_shader_include(struct hash_entry *entry) _mesa_hash_table_destroy(sh_incl_ht_entry->path, destroy_shader_include); free(sh_incl_ht_entry->shader_source); free(sh_incl_ht_entry); + free((void *)entry->key); } void @@ -3380,7 +3381,7 @@ validate_and_tokenise_sh_incl(struct gl_context *ctx, struct sh_incl_path_entry *path = rzalloc(mem_ctx, struct sh_incl_path_entry); - path->path = strdup(path_str); + path->path = ralloc_strdup(mem_ctx, path_str); list_addtail(&path->list, &list->list); } @@ -3568,7 +3569,8 @@ _mesa_NamedStringARB(GLenum type, GLint namelen, const GLchar *name, sh_incl_ht_entry->path = _mesa_hash_table_create(NULL, _mesa_hash_string, _mesa_key_string_equal); - _mesa_hash_table_insert(path_ht, entry->path, sh_incl_ht_entry); + _mesa_hash_table_insert(path_ht, strdup(entry->path), + sh_incl_ht_entry); } else { sh_incl_ht_entry = (struct sh_incl_path_ht_entry *) ht_entry->data; }
