mirror of
https://github.com/raysan5/raylib.git
synced 2025-09-06 03:18:14 +00:00
[rtext] TextFormat() warn user if buffer overflow occured. (#3399)
* [rtext] TextFormat now alerts user to truncation. * Update rtext.c * Update rcore.c * Update rtext.c
This commit is contained in:
12
src/rcore.c
12
src/rcore.c
@@ -2922,6 +2922,7 @@ static void PlayAutomationEvent(unsigned int frame)
|
||||
#if !defined(SUPPORT_MODULE_RTEXT)
|
||||
// Formatting of text with variables to 'embed'
|
||||
// WARNING: String returned will expire after this function is called MAX_TEXTFORMAT_BUFFERS times
|
||||
|
||||
const char *TextFormat(const char *text, ...)
|
||||
{
|
||||
#ifndef MAX_TEXTFORMAT_BUFFERS
|
||||
@@ -2940,12 +2941,21 @@ const char *TextFormat(const char *text, ...)
|
||||
|
||||
va_list args;
|
||||
va_start(args, text);
|
||||
vsnprintf(currentBuffer, MAX_TEXT_BUFFER_LENGTH, text, args);
|
||||
int charCountRequired = vsnprintf(currentBuffer, MAX_TEXT_BUFFER_LENGTH, text, args);
|
||||
va_end(args);
|
||||
|
||||
// If charCountRequired is larger than the MAX_TEXT_BUFFER_LENGTH, then overflow occured
|
||||
if(charCountRequired > MAX_TEXT_BUFFER_LENGTH)
|
||||
{
|
||||
// We are going to insert [TRUN] at the end of the string so the user knows what happened
|
||||
char *truncBuffer = buffers[index] + MAX_TEXT_BUFFER_LENGTH - 7; // 7 = six letters + '\0'
|
||||
sprintf(truncBuffer, "[TRUN]");
|
||||
}
|
||||
|
||||
index += 1; // Move to next buffer for next function call
|
||||
if (index >= MAX_TEXTFORMAT_BUFFERS) index = 0;
|
||||
|
||||
return currentBuffer;
|
||||
}
|
||||
|
||||
#endif // !SUPPORT_MODULE_RTEXT
|
||||
|
11
src/rtext.c
11
src/rtext.c
@@ -1371,15 +1371,24 @@ const char *TextFormat(const char *text, ...)
|
||||
|
||||
va_list args;
|
||||
va_start(args, text);
|
||||
vsnprintf(currentBuffer, MAX_TEXT_BUFFER_LENGTH, text, args);
|
||||
int charCountRequired = vsnprintf(currentBuffer, MAX_TEXT_BUFFER_LENGTH, text, args);
|
||||
va_end(args);
|
||||
|
||||
// If charCountRequired is larger than the MAX_TEXT_BUFFER_LENGTH, then overflow occured
|
||||
if(charCountRequired > MAX_TEXT_BUFFER_LENGTH)
|
||||
{
|
||||
// We are going to insert [TRUN] at the end of the string so the user knows what happened
|
||||
char *truncBuffer = buffers[index] + MAX_TEXT_BUFFER_LENGTH - 7; // 7 = six letters + '\0'
|
||||
sprintf(truncBuffer, "[TRUN]");
|
||||
}
|
||||
|
||||
index += 1; // Move to next buffer for next function call
|
||||
if (index >= MAX_TEXTFORMAT_BUFFERS) index = 0;
|
||||
|
||||
return currentBuffer;
|
||||
}
|
||||
|
||||
|
||||
// Get integer value from text
|
||||
// NOTE: This function replaces atoi() [stdlib.h]
|
||||
int TextToInteger(const char *text)
|
||||
|
Reference in New Issue
Block a user