Mercurial > hg > octave-lojdl > gnulib-hg
changeset 3582:abe625b0449a
(hash_clear): Fix a bug that could lead to an infloop or
e.g., a fault due to an attempt to free a NULL pointer.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Sat, 03 Nov 2001 08:23:54 +0000 |
parents | 68530c9df63a |
children | acb4987bbdfa |
files | lib/hash.c |
diffstat | 1 files changed, 6 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/hash.c +++ b/lib/hash.c @@ -1,5 +1,5 @@ /* hash - hashing table processing. - Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Written by Jim Meyering, 1992. This program is free software; you can redistribute it and/or modify @@ -576,19 +576,22 @@ hash_clear (Hash_table *table) { struct hash_entry *bucket; - struct hash_entry *cursor; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { + struct hash_entry *cursor; + struct hash_entry *next; + /* Free the bucket overflow. */ - for (cursor = bucket->next; cursor; cursor = cursor->next) + for (cursor = bucket->next; cursor; cursor = next) { if (table->data_freer) (*table->data_freer) (cursor->data); cursor->data = NULL; + next = cursor->next; /* Relinking is done one entry at a time, as it is to be expected that overflows are either rare or short. */ cursor->next = table->free_entry_list;