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;
       }

Reply via email to