[snipped]
More or less.
Yes, both values are potentially 'valid' as inputs to the downstream program, _but_ in this case the program verifier should be changed to insure the null pointer case is adequately treated and the program proceeds to a correct state, 'correct' in this case having two senses, the one the verifier can examine that a branch of the program treats this case, and in the application realm that the program/device does what is sensible and adequate to the business it serves.
[snipped]
Yes. In fact reducing the need for so many special code returns and so the space of possible failure modes is an art in itself!