Both are 'safe/sane/correct' if the caller checks before use. The issue is what happens if the caller doesn't check. Which is better, some flavour of null error or using an invalid value?
There is no single correct answer. It depends on what you are worried about.
If crashes are really bad but the answer isn't critical or has an exceptedaccepted default value, then perhaps using a boolean as a flag is better. If using the wrong answer is a greaterworse issue than crashing, then using null is better.
For the majority of the 'typical' cases, fast failure and forcing the callers to check is the fastest way to sane code. Hence, and hence I think null should be the default choice but. I wouldn't put too much faith in the "X is the root of all evil" evangelists. They though; they normally haven't anticipated all the use cases.