This feels unnatural.
The constant function should have a “position” argument, and for this particular case the position is getCallstack. Exceptions are not needed here at all (though I could go as far as to say they’re not needed ever when dealing with expected errors, but that’s just my view on things).
Also I would expect the size check on Data to be performed in a separate stage instead of being mushed together with all other future errors.