summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/message.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/message.cc')
-rw-r--r--crawl-ref/source/message.cc15
1 files changed, 10 insertions, 5 deletions
diff --git a/crawl-ref/source/message.cc b/crawl-ref/source/message.cc
index 6a3d36c487..a6adba6847 100644
--- a/crawl-ref/source/message.cc
+++ b/crawl-ref/source/message.cc
@@ -413,12 +413,17 @@ int channel_to_colour( msg_channel_type channel, int param )
static void do_message_print( msg_channel_type channel, int param,
const char *format, va_list argp )
{
- // Is this limit intentional?
char buff[200];
- vsnprintf( buff, sizeof( buff ), format, argp );
- buff[199] = 0;
-
- mpr(buff, channel, param);
+ size_t len = vsnprintf( buff, sizeof( buff ), format, argp );
+ if (len < sizeof( buff )) {
+ mpr( buff, channel, param );
+ }
+ else {
+ char *heapbuf = (char*)malloc( len + 1 );
+ vsnprintf( heapbuf, len + 1, format, argp );
+ mpr( heapbuf, channel, param );
+ free( heapbuf );
+ }
}
void mprf( msg_channel_type channel, int param, const char *format, ... )