void deserializeFileNodeListFragment(FileNodeList data, FileChunkReference next,
                                         FileNodePtr curPath) throws IOException, TikaException {
        data.fileNodeListHeader = deserializeFileNodeListHeader();
        boolean terminated = false;
        while (offset + 24 <= end) { // while there are at least 24 bytes free
            // 24 = sizeof(nextFragment) [12 bytes] + sizeof(footer) [8 bytes]
            // + 4 bytes for the FileNode header
            CheckedFileNodePushBack pushBack = new CheckedFileNodePushBack(data);
            try {
                long initialOffset = offset;
                FileNode fileNode =
                        deserializeFileNode(data.children.get(data.children.size() - 1), curPath);
                if (initialOffset == offset) {
                    //nothing read; avoid an infinite loop
                    break;
                }
                if (fileNode.id == FndStructureConstants.ChunkTerminatorFND || fileNode.id == 0) {
                    terminated = true;
                    break;
                }
                pushBack.commit();
                FileNode dereference = curPath.dereference(document);
                FileNode lastChild = data.children.get(data.children.size() - 1);
                assert dereference.equals(lastChild); // is this correct? or should we be
                // checking the pointer?
                Integer curPathOffset =
                        curPath.nodeListPositions.get(curPath.nodeListPositions.size() - 1);
                curPath.nodeListPositions.set(curPath.nodeListPositions.size() - 1,
                        curPathOffset + 1);
            } finally {
                pushBack.popBackIfNotCommitted();
            }
        }
        reposition(end - 20);
        FileChunkReference nextChunkRef = deserializeFileChunkReference64x32();
        next.cb = nextChunkRef.cb;
        next.stp = nextChunkRef.stp;
        if (terminated) {
            LOG.debug("{}Chunk terminator found NextChunkRef.cb={}, NextChunkRef.stp={}," +
                            " Offset={}, End={}", getIndent(), nextChunkRef.cb, nextChunkRef.stp, offset,
                    end);
            // TODO check that next is OK
        }
        long footer = deserializeLittleEndianLong();
        if (footer != FOOTER_CONST) {
            throw new TikaException(
                    "Invalid footer constant. Expected " + FOOTER_CONST + " but was " + footer);
        }
    }
Deserializes a FileNodeListFragment.
<p>
The FileNodeListFragment structure specifies a sequence of file nodes from a file node
list. The size of the FileNodeListFragment structure is specified by the structure that
references it.
<p>
All fragments in the same file node list MUST have the same FileNodeListFragment.header
.FileNodeListID field.

@param data    List of file nodes that we collect while deserializing.
@param next    The next file chunk we are referencing.
@param curPath The current FileNodePtr.
tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/onenote/OneNotePtr.java