@@ -34,6 +34,7 @@ namespace __asan {
34
34
static void (*error_report_callback)(const char *);
35
35
static char *error_message_buffer = nullptr ;
36
36
static uptr error_message_buffer_pos = 0 ;
37
+ static uptr error_message_buffer_size = kErrorMessageBufferSize ;
37
38
static Mutex error_message_buf_mutex;
38
39
static const unsigned kAsanBuggyPcPoolSize = 25 ;
39
40
static __sanitizer::atomic_uintptr_t AsanBuggyPcPool[kAsanBuggyPcPoolSize ];
@@ -42,17 +43,23 @@ void AppendToErrorMessageBuffer(const char *buffer) {
42
43
Lock l (&error_message_buf_mutex);
43
44
if (!error_message_buffer) {
44
45
error_message_buffer =
45
- (char *)MmapOrDieQuietly (kErrorMessageBufferSize , __func__);
46
+ (char *)MmapOrDieQuietly (error_message_buffer_size , __func__);
46
47
error_message_buffer_pos = 0 ;
47
48
}
48
49
uptr length = internal_strlen (buffer);
49
- RAW_CHECK (kErrorMessageBufferSize >= error_message_buffer_pos);
50
- uptr remaining = kErrorMessageBufferSize - error_message_buffer_pos;
51
- internal_strncpy (error_message_buffer + error_message_buffer_pos,
52
- buffer, remaining);
53
- error_message_buffer[kErrorMessageBufferSize - 1 ] = ' \0 ' ;
54
- // FIXME: reallocate the buffer instead of truncating the message.
55
- error_message_buffer_pos += Min (remaining, length);
50
+ if (error_message_buffer_pos + length + 1 > error_message_buffer_size) {
51
+ uptr new_size = RoundUpToPowerOfTwo (error_message_buffer_size + length + 1 );
52
+ RAW_CHECK (new_size > error_message_buffer_size);
53
+ char *new_buffer = (char *)MmapOrDieQuietly (new_size, __func__);
54
+ internal_memcpy (new_buffer, error_message_buffer,
55
+ error_message_buffer_size);
56
+ UnmapOrDieQuietly (error_message_buffer, error_message_buffer_size);
57
+ error_message_buffer = new_buffer;
58
+ error_message_buffer_size = new_size;
59
+ }
60
+ internal_strncpy (error_message_buffer + error_message_buffer_pos, buffer,
61
+ length + 1 );
62
+ error_message_buffer_pos += length;
56
63
}
57
64
58
65
// ---------------------- Helper functions ----------------------- {{{1
0 commit comments