Hi!
Sorry for misguiding you, I've overlooked va_rawsize with va_extinfo.
You're right, va_rawsize holds uncompressed size, and extinfo actual
storage size. This was not intentional.
I'd better not count on caller's do know detoasted data length,
and much more the buffer is correctly initialized, because we cannot
check that inside and must rely on the caller, which would for sure
lead to unexpected segfaults, I agree with Tom Lane's proposal above.
Other options seem to be more crude and error-prone here. This is
an internal data fetching function and it should not generate new kinds
of errors, I think.
In case you're playing with this part of the code - I was always
confused with detoast_attr and detoast_external_attr functions
both marked as entry points of retrieving toasted data and both
look a lot the same. Have you ever thought of making a single
entry point by slightly redesigning this part?