cvs: php-src /ext/fileinfo/libmagic apprentice.c
| From: | Scott MacVicar | Date: | Wed, 22 Oct 2008 13:59:09 +0000 |
| Subject: | cvs: php-src /ext/fileinfo/libmagic apprentice.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-53660@lists.php.net to get a copy of this message | ||
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;
}