[Mesa-dev] [PATCH 06/20] mesa: add null checks in symbol_table.c
Ian Romanick
idr at freedesktop.org
Wed May 14 13:04:10 PDT 2014
On 05/14/2014 10:55 AM, Juha-Pekka Heikkila wrote:
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
> ---
> src/mesa/program/symbol_table.c | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
> diff --git a/src/mesa/program/symbol_table.c b/src/mesa/program/symbol_table.c
> index 9462978..5b22745 100644
> --- a/src/mesa/program/symbol_table.c
> +++ b/src/mesa/program/symbol_table.c
> @@ -172,6 +172,11 @@ _mesa_symbol_table_push_scope(struct _mesa_symbol_table *table)
> {
> struct scope_level *const scope = calloc(1, sizeof(*scope));
>
> + if (scope == NULL) {
> + _mesa_error_no_memory(__func__);
> + return;
> + }
> +
I think this function needs to return an error value, and the callers
need to notice that error. Otherwise the following
_mesa_symbol_table_pop_scope will really screw things up... perhaps
leading eventually to popping an empty stack.
> scope->next = table->current_scope;
> table->current_scope = scope;
> table->depth++;
> @@ -254,7 +259,17 @@ _mesa_symbol_table_add_symbol(struct _mesa_symbol_table *table,
>
> if (hdr == NULL) {
> hdr = calloc(1, sizeof(*hdr));
> + if (hdr == NULL) {
> + _mesa_error_no_memory(__func__);
> + return -1;
> + }
> +
> hdr->name = strdup(name);
> + if (hdr->name == NULL) {
> + free(hdr);
> + _mesa_error_no_memory(__func__);
> + return -1;
> + }
>
> hash_table_insert(table->ht, hdr, hdr->name);
> hdr->next = table->hdr;
> @@ -276,6 +291,11 @@ _mesa_symbol_table_add_symbol(struct _mesa_symbol_table *table,
> return -1;
>
> sym = calloc(1, sizeof(*sym));
> + if (sym == NULL) {
> + _mesa_error_no_memory(__func__);
> + return -1;
> + }
> +
> sym->next_with_same_name = hdr->symbols;
> sym->next_with_same_scope = table->current_scope->symbols;
> sym->hdr = hdr;
> @@ -311,6 +331,11 @@ _mesa_symbol_table_add_global_symbol(struct _mesa_symbol_table *table,
>
> if (hdr == NULL) {
> hdr = calloc(1, sizeof(*hdr));
> + if (hdr == NULL) {
> + _mesa_error_no_memory(__func__);
> + return -1;
> + }
> +
> hdr->name = strdup(name);
Check this one too? Are there other strdups that were missed? It seems
like all of the "add a symbol" functions should have a strdup somewhere...
>
> hash_table_insert(table->ht, hdr, hdr->name);
> @@ -340,6 +365,11 @@ _mesa_symbol_table_add_global_symbol(struct _mesa_symbol_table *table,
> }
>
> sym = calloc(1, sizeof(*sym));
> + if (sym == NULL) {
> + _mesa_error_no_memory(__func__);
> + return -1;
> + }
> +
> sym->next_with_same_scope = top_scope->symbols;
> sym->hdr = hdr;
> sym->name_space = name_space;
>
More information about the mesa-dev
mailing list