diff options
author | Martin Pool <mbp@samba.org> | 2003-02-26 06:19:16 +0000 |
---|---|---|
committer | Martin Pool <mbp@samba.org> | 2003-02-26 06:19:16 +0000 |
commit | f7bb6982980abf32b98fee8e2624bb5932554dfe (patch) | |
tree | 8c62e3f74bb99f4b485528cae639116dc3c75934 /source3 | |
parent | b906a9df75b6bdc6fe166e9aa5a8aa398176a518 (diff) | |
download | samba-f7bb6982980abf32b98fee8e2624bb5932554dfe.tar.gz samba-f7bb6982980abf32b98fee8e2624bb5932554dfe.tar.bz2 samba-f7bb6982980abf32b98fee8e2624bb5932554dfe.zip |
init_valid_table: Fix a memory leak that would lose the
dynamically-created valid table every time the configuration was
reloaded.
(This used to be commit e42b237d980461caf2dd2a8f82c17bf674facb7d)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/lib/util_unistr.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/source3/lib/util_unistr.c b/source3/lib/util_unistr.c index 522ab7eb40..c666155f9f 100644 --- a/source3/lib/util_unistr.c +++ b/source3/lib/util_unistr.c @@ -105,27 +105,34 @@ static int check_dos_char(smb_ucs2_t c) **/ void init_valid_table(void) { - static int initialised; static int mapped_file; int i; const char *allowed = ".!#$%&'()_-@^`~"; + uint8 *valid_file; - if (initialised && mapped_file) return; - initialised = 1; + if (mapped_file) { + /* Can't unmap files, so stick with what we have */ + return; + } - valid_table = map_file(lib_path("valid.dat"), 0x10000); - if (valid_table) { + valid_file = map_file(lib_path("valid.dat"), 0x10000); + if (valid_file) { + valid_table = valid_file; mapped_file = 1; return; } - /* Otherwise, using a dynamically loaded one. */ + /* Otherwise, we're using a dynamically created valid_table. + * It might need to be regenerated if the code page changed. + * We know that we're not using a mapped file, so we can + * free() the old one. */ if (valid_table) free(valid_table); DEBUG(2,("creating default valid table\n")); valid_table = malloc(0x10000); - for (i=0;i<128;i++) valid_table[i] = isalnum(i) || - strchr(allowed,i); + for (i=0;i<128;i++) + valid_table[i] = isalnum(i) || strchr(allowed,i); + for (;i<0x10000;i++) { smb_ucs2_t c; SSVAL(&c, 0, i); |