private void checkTypeNameComponent() throws InvalidDataTypeException {
		Program program = getProgram();
		Memory memory = program.getMemory();
		Address typeDescriptorAddress = getAddress();
		int pointerSize = getDefaultPointerSize();

		String typeName = doGetTypeName();
		if (typeName == null) {
			throw new InvalidDataTypeException(
				getName() + " data type at " + getAddress() + " doesn't have a valid type name.");
		}
		int nameLength = typeName.length();
		if (nameLength == 0) {
			throw new InvalidDataTypeException(
				getName() + " data type at " + getAddress() + " doesn't have a valid type name.");
		}

		int lengthWithoutAlignPadding = getNameOffset(program) + nameLength;
		int mod = lengthWithoutAlignPadding % pointerSize;
		int padSize = (mod == 0) ? 0 : (pointerSize - mod);
		int paddedLength = lengthWithoutAlignPadding + padSize;
		try {
			// Test that we can get the expected number of bytes.
			MSDataTypeUtils.getBytes(memory, typeDescriptorAddress, paddedLength);
		}
		catch (InvalidDataTypeException e) {
			String paddingErrorMessage = getName() + " data type at " + getAddress() +
				" doesn't have valid alignment after the vftable name.";
			throw new InvalidDataTypeException(e.getMessage() + "\n" + paddingErrorMessage);
		}

		if (containsWhitespace(typeName)) {
			throw new InvalidDataTypeException(
				getName() + " data type at " + getAddress() + " doesn't have a valid type name.");
		}
	}
Whether or not the memory at the indicated address appears to be a valid location for the
indicated number of TypeDescriptor data types.
@throws InvalidDataTypeException if this model's location does not appear to be a valid
group of TypeDescriptors. The exception has a message indicating
why it does not appear to be a valid location for the data type.
Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/TypeDescriptorModel.java