void deserializePageNumbers(PdbByteReader reader) throws PdbException, CancelledException {
		// This calculations works fine for streamLength = 0
		//  and even streamLength = -1 (0xffffffff).
		int numPages = Msf.floorDivisionWithLog2Divisor(streamLength, msf.getLog2PageSize());
		if (msf.getPageNumberSize() == 2) {
			for (int i = 0; i < numPages; i++) {
				msf.checkCancelled();
				int pageNumber = reader.parseUnsignedShortVal();
				if (pageNumber == 0) {
					break;
				}
				pageList.add(pageNumber);
			}
		}
		else if (msf.getPageNumberSize() == 4) {
			for (int i = 0; i < numPages; i++) {
				msf.checkCancelled();
				int pageNumber = reader.parseInt();
				if (pageNumber == 0) {
					break;
				}
				pageList.add(pageNumber);
			}
		}
	}
Deserializes Stream page number information from the bytes parameter starting at the
 index offset and uses it to provide necessary information for the Stream to be usable.
 Generally, deserialization is part of the step of loading the Stream information from
 persistent storage (disc)
@param reader {@link PdbByteReader} from which to parse the information
@throws PdbException upon not enough data left to parse
@throws CancelledException upon user cancellation
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/msf/MsfStream.java