On Wed, 2016-12-14 at 10:20 +0100, Henri Verbeet wrote:
On 13 December 2016 at 20:17, Austin English austinenglish@gmail.com wrote:
/* buf was originally [24], increased to 48 to prevent a stack smashing error when running tests under Valgrind */
unsigned char buf[48]; /* "-1.1111111111111111E-308". */
The more interesting comment would perhaps be what actually happens and why this helps.
Valgrind doesn't really support 80-bit floating point arithmetic: http://www.valgrind.org/docs/manual/manual-core.html#manual-core.limits
One thing I do notice is that while 24 chars would be enough to hold "-1.1111111111111111E-308", that doesn't leave any room for the \0 terminator, while the other cases above this one do seem to include space for that.
The other cases need space for \0 because they use sprintf. Length is always passed so callers should not depend on zero-termination.