scottmac Wed Oct 22 13:59:09 2008 UTC Modified files: /php-src/ext/fileinfo/libmagic apprentice.c Log: When using the internal database and there is an error it could try free some invalid things. This was causing a bus error on ppc. http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/apprentice.c?r1=1.14&r2=1.15&diff_format=u Index: php-src/ext/fileinfo/libmagic/apprentice.c diff -u php-src/ext/fileinfo/libmagic/apprentice.c:1.14 php-src/ext/fileinfo/libmagic/apprentice.c:1.15 --- php-src/ext/fileinfo/libmagic/apprentice.c:1.14 Mon Oct 20 23:35:47 2008 +++ php-src/ext/fileinfo/libmagic/apprentice.c Wed Oct 22 13:59:08 2008 @@ -1834,6 +1834,9 @@ /* * handle a compiled file. + * return -1 = error + * return 1 = memory structure you can free + * return 3 = bundled library from PHP */ private int apprentice_map(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, @@ -1845,7 +1848,7 @@ char *dbname = NULL; void *mm = NULL; int ret = 0; - php_stream *stream; + php_stream *stream = NULL; php_stream_statbuf st; @@ -1900,12 +1903,15 @@ goto error1; } needsbyteswap = 1; - } else + } else { needsbyteswap = 0; + } + if (needsbyteswap) version = swap4(ptr[1]); else version = ptr[1]; + if (version != VERSIONNO) { file_error(ms, 0, "File %d.%d supports only %d version magic " "files. `%s' is version %d", FILE_VERSION_MAJOR, patchlevel, @@ -1945,14 +1951,17 @@ if (stream) { php_stream_close(stream); } - if (mm) { + + if (mm && ret == 1) { efree(mm); } else { *magicp = NULL; *nmagicp = 0; } error2: - efree(dbname); + if (dbname) { + efree(dbname); + } return -1; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php