]> granicus.if.org Git - php/commitdiff
Fix bug #67328 (fileinfo: numerous file_printf calls resulting in performance degrada...
authorStanislav Malyshev <stas@php.net>
Tue, 27 May 2014 00:50:14 +0000 (17:50 -0700)
committerStanislav Malyshev <stas@php.net>
Fri, 18 Jul 2014 22:52:00 +0000 (15:52 -0700)
Upstream patch: https://github.com/file/file/commit/b8acc83781d5a24cc5101e525d15efe0482c280d

ext/fileinfo/libmagic/cdf.c

index ffde3f4dcfb4c554845249aa476fccbc20d72285..ea67966c49ba46aacbb0f523363344863ba75d3f 100644 (file)
@@ -948,7 +948,7 @@ int
 cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h,
     cdf_summary_info_header_t *ssi, cdf_property_info_t **info, size_t *count)
 {
-       size_t i, maxcount;
+       size_t maxcount;
        const cdf_summary_info_header_t *si =
            CAST(const cdf_summary_info_header_t *, sst->sst_tab);
        const cdf_section_declaration_t *sd =
@@ -963,21 +963,13 @@ cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h,
        ssi->si_os = CDF_TOLE2(si->si_os);
        ssi->si_class = si->si_class;
        cdf_swap_class(&ssi->si_class);
-       ssi->si_count = CDF_TOLE2(si->si_count);
+       ssi->si_count = CDF_TOLE4(si->si_count);
        *count = 0;
        maxcount = 0;
        *info = NULL;
-       for (i = 0; i < CDF_TOLE4(si->si_count); i++) {
-               if (i >= CDF_LOOP_LIMIT) {
-                       DPRINTF(("Unpack summary info loop limit"));
-                       errno = EFTYPE;
-                       return -1;
-               }
-               if (cdf_read_property_info(sst, h, CDF_TOLE4(sd->sd_offset),
-                   info, count, &maxcount) == -1) {
+       if (cdf_read_property_info(sst, h, CDF_TOLE4(sd->sd_offset), info,
+               count, &maxcount) == -1) 
                        return -1;
-               }
-       }
        return 0;
 }