Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
<?php
>
/** * This file is part of FPDI * * @package setasign\Fpdi
< * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
> * @copyright Copyright (c) 2020 Setasign GmbH & Co. KG (https://www.setasign.com)
* @license http://opensource.org/licenses/mit-license The MIT License */ namespace setasign\Fpdi\PdfParser\Filter; /** * Class for handling ASCII base-85 encoded data
< * < * @package setasign\Fpdi\PdfParser\Filter
*/ class Ascii85 implements FilterInterface { /** * Decode ASCII85 encoded string. * * @param string $data The input string * @return string * @throws Ascii85Exception */ public function decode($data) { $out = ''; $state = 0; $chn = null;
> $data = \preg_replace('/\s/', '', $data); $l = \strlen($data); >
/** @noinspection ForeachInvariantsInspection */ for ($k = 0; $k < $l; ++$k) { $ch = \ord($data[$k]) & 0xff; //Start <~ if ($k === 0 && $ch === 60 && isset($data[$k + 1]) && (\ord($data[$k + 1]) & 0xFF) === 126) { $k++; continue; } //End ~> if ($ch === 126 && isset($data[$k + 1]) && (\ord($data[$k + 1]) & 0xFF) === 62) { break; }
< if (\preg_match('/^\s$/', \chr($ch))) { < continue; < }
>
if ($ch === 122 /* z */ && $state === 0) { $out .= \chr(0) . \chr(0) . \chr(0) . \chr(0); continue; }
>
if ($ch < 33 /* ! */ || $ch > 117 /* u */) { throw new Ascii85Exception( 'Illegal character found while ASCII85 decode.', Ascii85Exception::ILLEGAL_CHAR_FOUND ); } $chn[$state] = $ch - 33;/* ! */ $state++; if ($state === 5) { $state = 0; $r = 0; for ($j = 0; $j < 5; ++$j) { /** @noinspection UnnecessaryCastingInspection */ $r = (int)($r * 85 + $chn[$j]); } $out .= \chr($r >> 24) . \chr($r >> 16) . \chr($r >> 8) . \chr($r); } } if ($state === 1) { throw new Ascii85Exception( 'Illegal length while ASCII85 decode.', Ascii85Exception::ILLEGAL_LENGTH ); } if ($state === 2) { $r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1] + 1) * 85 * 85 * 85; $out .= \chr($r >> 24);
<
} elseif ($state === 3) { $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + ($chn[2] + 1) * 85 * 85; $out .= \chr($r >> 24); $out .= \chr($r >> 16);
<
} elseif ($state === 4) { $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + $chn[2] * 85 * 85 + ($chn[3] + 1) * 85; $out .= \chr($r >> 24); $out .= \chr($r >> 16); $out .= \chr($r >> 8); } return $out; } }