Example #1
0
 public static function decDocument($data, &$offset)
 {
     $docLen = Util::unpack('Vlen', $data, $offset, 4)['len'] - 5;
     // subtract len. and null-terminator
     $document = [];
     $parsedLen = 0;
     while (0 !== ord($data[$offset])) {
         $elmLen = $offset;
         $elm = self::decElement($data, $offset);
         $parsedLen += $offset - $elmLen;
         $document[$elm[0]] = $elm[1];
     }
     if ($docLen !== $parsedLen) {
         throw new \RuntimeException(sprintf('Document length doesn\'t match total size of parsed elements (%d:%d)', $docLen, $parsedLen));
     }
     $offset++;
     // add one byte for document nul-terminator
     return $document;
 }