[Mesa-dev] [PATCH] glsl/cache: correct asprintf error handling
Iago Toral
itoral at igalia.com
Thu Nov 3 10:27:45 UTC 2016
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
On Thu, 2016-11-03 at 11:03 +0100, Nicolai Hähnle wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> From the manpage of asprintf:
>
> "If memory allocation wasn't possible, or some other error occurs,
> these functions will return -1, and the contents of strp are
> undefined."
> ---
> src/compiler/glsl/cache.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/compiler/glsl/cache.c b/src/compiler/glsl/cache.c
> index 64a34f0..e74c27d 100644
> --- a/src/compiler/glsl/cache.c
> +++ b/src/compiler/glsl/cache.c
> @@ -409,21 +409,22 @@ choose_random_file_matching(const char
> *dir_path,
> break;
>
> count++;
> }
>
> if (entry == NULL) {
> closedir(dir);
> return NULL;
> }
>
> - asprintf(&filename, "%s/%s", dir_path, entry->d_name);
> + if (asprintf(&filename, "%s/%s", dir_path, entry->d_name) < 0)
> + filename = NULL;
>
> closedir(dir);
>
> return filename;
> }
>
> /* Is entry a regular file, and not having a name with a trailing
> * ".tmp"
> */
> static bool
> @@ -490,22 +491,21 @@ evict_random_item(struct program_cache *cache)
> int a, b;
> size_t size;
>
> /* With a reasonably-sized, full cache, (and with keys generated
> * from a cryptographic hash), we can choose two random hex
> digits
> * and reasonably expect the directory to exist with a file in
> it.
> */
> a = rand() % 16;
> b = rand() % 16;
>
> - asprintf (&dir_path, "%s/%c%c", cache->path, hex[a], hex[b]);
> - if (dir_path == NULL)
> + if (asprintf(&dir_path, "%s/%c%c", cache->path, hex[a], hex[b]) <
> 0)
> return;
>
> size = unlink_random_file_from_directory(dir_path);
>
> free(dir_path);
>
> if (size) {
> p_atomic_add(cache->size, - size);
> return;
> }
More information about the mesa-dev
mailing list