BlockListAsLongs() and BlockListAsLongs(long) produce invalid instances. The former calls the latter with BlockListAsLongs(null), which is internally short-circuited to create an internal blockList array that does not contain the sentinel delimiting block. An assert in getNumberOfBlocks will trip, which also prevents the "empty" block list from being iterated.
Both ctors are present in the call tree for DN registration and block reports. Either those code paths are never executed, or the exceptions are swallowed and go unnoticed. I found it while writing unit tests.