From f0f6fa0c458cebf23e98592a22a8fec1c8ee191f Mon Sep 17 00:00:00 2001 From: kai Date: Sun, 24 Mar 2013 17:36:20 +0100 Subject: [PATCH] Fix a buffer overrun on Linux/PPC64. The buffer in realToMangleBuffer() is too small for longdouble values. It produces strings like 0X1.599999999999999999999999998P+1 or 0X1.999999999999999999999999998P-4 which have a length of 34. This results in an ICE e.g. in the unit test of std.range. --- src/expression.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/expression.c b/src/expression.c index cf2e6da36127..aac5b45ab5a7 100644 --- a/src/expression.c +++ b/src/expression.c @@ -2669,7 +2669,7 @@ void realToMangleBuffer(OutBuffer *buf, real_t value) buf->writestring("NAN"); // no -NAN bugs else { - char buffer[32]; + char buffer[36]; int n = ld_sprint(buffer, 'A', value); assert(n > 0 && n < sizeof(buffer)); for (int i = 0; i < n; i++)