scottmac Mon Oct 20 23:36:14 2008 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/fileinfo/libmagic apprentice.c
Log:
MFH Fix bug #46331 - The internal magic db is const memory and segfaults when
you try to do byte swapping
on big endian machines. This fixes it by copying the memory for those
processors, but this isn't ideal as
it wastes memory. Perhaps using a static cache would be better.
http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/apprentice.c?r1=1.7.2.8&r2=1.7.2.9&diff_format=u
Index: php-src/ext/fileinfo/libmagic/apprentice.c
diff -u php-src/ext/fileinfo/libmagic/apprentice.c:1.7.2.8
php-src/ext/fileinfo/libmagic/apprentice.c:1.7.2.9
--- php-src/ext/fileinfo/libmagic/apprentice.c:1.7.2.8 Mon Oct 20 14:45:59 2008
+++ php-src/ext/fileinfo/libmagic/apprentice.c Mon Oct 20 23:36:14 2008
@@ -1921,6 +1921,16 @@
goto error1;
}
+ /* php_magic_database is a const, performing writes will segfault. This
is for big-endian
+ machines only, PPC and Sparc specifically. Consider static variable or
MINIT in
+ future. */
+ if (needsbyteswap && fn == NULL) {
+ mm = emalloc(sizeof(php_magic_database));
+ mm = memcpy(mm, php_magic_database, sizeof(php_magic_database));
+ *magicp = mm;
+ ret = 1;
+ }
+
if (fn == NULL) {
*nmagicp = (sizeof(php_magic_database) / sizeof(struct magic));
} else {
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php