+ /**
+ * Checks whether the final (last) chunk is valid
+ *
+ * @param $chunks An array with chunks and (hopefully) a valid final chunk
+ * @return $isValid Whether the final (last) chunk is valid
+ */
+ private function isValidFinalChunk (array $chunks) {
+ // Default is all fine
+ $isValid = TRUE;
+
+ // Split the (possible) EOP chunk
+ $chunkSplits = explode(PackageFragmenter::CHUNK_DATA_HASH_SEPARATOR, $chunks[count($chunks) - 1]);
+
+ // Make sure chunks with only 3 elements are parsed (for details see ChunkHandler)
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('eopChunk=' . $chunks[count($chunks) - 1] . ',chunkSplits=' . print_r($chunkSplits, TRUE));
+ assert(count($chunkSplits) == 3);
+
+ // Validate final chunk
+ if (substr($chunkSplits[ChunkHandler::CHUNK_SPLITS_INDEX_RAW_DATA], 0, strlen(PackageFragmenter::END_OF_PACKAGE_IDENTIFIER)) != PackageFragmenter::END_OF_PACKAGE_IDENTIFIER) {
+ // Not fine
+ $isValid = FALSE;
+ } elseif (substr_count($chunkSplits[ChunkHandler::CHUNK_SPLITS_INDEX_RAW_DATA], PackageFragmenter::CHUNK_HASH_SEPARATOR) != 1) {
+ // CHUNK_HASH_SEPARATOR shall only be found once
+ $isValid = FALSE;
+ }
+
+ // Return status
+ return $isValid;
+ }
+