diff --git a/externals/pear-figlet/Text/Figlet.php b/externals/pear-figlet/Text/Figlet.php --- a/externals/pear-figlet/Text/Figlet.php +++ b/externals/pear-figlet/Text/Figlet.php @@ -119,10 +119,50 @@ $this->font_comment = ''; + // If Gzip compressed font + if (substr($filename, -3, 3) == '.gz') { + $filename = 'compress.zlib://' . $filename; + $compressed = true; + + if (!function_exists('gzcompress')) { + return self::raiseError('Cannot load gzip compressed fonts since' + . ' gzcompress() is not available.', + 3); + } + } else { + $compressed = false; + } + if (!($fp = fopen($filename, 'rb'))) { return self::raiseError('Cannot open figlet font file ' . $filename, 2); } + if (!$compressed) { + /* ZIPed font */ + if (fread($fp, 2) == 'PK') { + fclose($fp); + + $zip = new ZipArchive(); + $open_result = $zip->open($filename, ZipArchive::RDONLY); + if ($open_result !== true) { + return self::raiseError('Cannot open figlet font file ' . + $filename . ', got error: ' . $open_result, 2); + } + + $name = $zip->getNameIndex(0); + $zip->close(); + + if (!($fp = fopen('zip://' . realpath($filename) . '#' . $name, 'rb'))) { + return self::raiseError('Cannot open figlet font file ' . $filename, 2); + } + + $compressed = true; + } else { + flock($fp, LOCK_SH); + rewind($fp); + } + } + // flf2a$ 6 5 20 15 3 0 143 229 // | | | | | | | | | | // / / | | | | | | | \