]> granicus.if.org Git - php/commitdiff
Fixed bug #66307 Fileinfo crashes with powerpoint files
authorAnatol Belski <ab@php.net>
Thu, 24 Apr 2014 17:30:34 +0000 (19:30 +0200)
committerAnatol Belski <ab@php.net>
Thu, 24 Apr 2014 17:30:34 +0000 (19:30 +0200)
NEWS
ext/fileinfo/libmagic/readcdf.c
ext/fileinfo/tests/finfo_file_002.phpt
ext/fileinfo/tests/resources/test.ppt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index ca0617cb51e7dff2042e3a833dcbd9711cdfbc4a..f1c0394319f9a7f19e611dd7a47ce6c8049082c5 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,9 @@ PHP                                                                        NEWS
   . Fixed bug #67081 (DOMDocumentType->internalSubset returns entire DOCTYPE tag,
     not only the subset). (Anatol)
 
+- Fileinfo:
+  . Fixed bug #66307 (Fileinfo crashes with powerpoint files). (Anatol)
+
 - FPM:
   . Fixed bug #66908 (php-fpm reload leaks epoll_create() file descriptor).
     (Julio Pintos)
index 3abcc2e62e1c034edeba02adf86b954ec84a3e5d..ade10b2bf70bf0cee9af0109dea534aeb670cb26 100644 (file)
@@ -56,6 +56,8 @@ cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info,
         const char *s;
         int len;
 
+       memset(&ts, 0, sizeof(ts));
+
         for (i = 0; i < count; i++) {
                 cdf_print_property_name(buf, sizeof(buf), info[i].pi_id);
                 switch (info[i].pi_type) {
@@ -142,10 +144,11 @@ cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info,
                                                 return -1;
                                 } else {
                                         char *c, *ec;
+                                       const time_t sec = ts.tv_sec;
                                         if (cdf_timestamp_to_timespec(&ts, tp) == -1) {
                                                                                        return -1;
                                                                                }
-                                        c = cdf_ctime(&ts.tv_sec, tbuf);
+                                        c = cdf_ctime(&sec, tbuf);
                                         if ((ec = strchr(c, '\n')) != NULL)
                                                 *ec = '\0';
 
index feb4010f74b0ae3959790aac8ac2c365bdd64c94..5cce7f3f9b2de50fc4aa8d15664b6fbe2a111794 100644 (file)
@@ -18,7 +18,7 @@ ksort($results);
 var_dump($results);
 ?>
 --EXPECTF--
-array(8) {
+array(9) {
   ["%s/resources/dir.zip"]=>
   string(15) "application/zip"
   ["%s/resources/test.awk"]=>
@@ -35,4 +35,6 @@ array(8) {
   string(15) "application/pdf"
   ["%s/resources/test.png"]=>
   string(9) "image/png"
+  ["%s/resources/test.ppt"]=>
+  string(29) "application/vnd.ms-powerpoint"
 }
diff --git a/ext/fileinfo/tests/resources/test.ppt b/ext/fileinfo/tests/resources/test.ppt
new file mode 100644 (file)
index 0000000..713004c
Binary files /dev/null and b/ext/fileinfo/tests/resources/test.ppt differ