diff -aur file-5.18/ChangeLog file.git/ChangeLog --- file-5.18/ChangeLog 2014-03-26 16:27:39.000000000 +0100 +++ file.git/ChangeLog 2014-04-03 18:50:06.066659023 +0200 @@ -1,3 +1,7 @@ +2014-04-01 15:25 Christos Zoulas + + * PR/341: Jan Kaluza, fix memory leak + * PR/342: Jan Kaluza, fix out of bounds read 2014-03-26 11:25 Christos Zoulas * release 5.18 diff -aur file-5.18/src/apprentice.c file.git/src/apprentice.c --- file-5.18/src/apprentice.c 2014-03-14 19:48:11.000000000 +0100 +++ file.git/src/apprentice.c 2014-04-03 18:50:06.086659024 +0200 @@ -517,14 +517,18 @@ { if (map == NULL) return; - if (map->p == NULL) - return; + if (map->p != NULL) { #ifdef QUICK - if (map->len) - (void)munmap(map->p, map->len); - else + if (map->len) + (void)munmap(map->p, map->len); + else #endif free(map->p); + } else { + uint32_t j; + for (j = 0; j < MAGIC_SETS; j++) + free(map->magic[j]); + } free(map); } @@ -1290,11 +1294,7 @@ magic_entry_free(mset[j].me, mset[j].count); if (errs) { - for (j = 0; j < MAGIC_SETS; j++) { - if (map->magic[j]) - free(map->magic[j]); - } - free(map); + apprentice_unmap(map); return NULL; } return map; diff -aur file-5.18/python/magic.py file.git/python/magic.py --- file-5.18/python/magic.py 2014-04-04 20:34:38.086623965 +0200 +++ file.git/python/magic.py 2014-04-04 20:35:42.886623752 +0200 @@ -116,7 +116,10 @@ is set. A call to errno() will return the numeric error code. """ try: # attempt python3 approach first - bi = bytes(filename, 'utf-8') + if isinstance(filename, bytes): + bi = filename + else: + bi = bytes(filename, 'utf-8') return str(_file(self._magic_t, bi), 'utf-8') except: return _file(self._magic_t, filename.encode('utf-8'))