mirror of
https://github.com/raysan5/raylib.git
synced 2025-12-19 12:55:35 +00:00
ADDED: Multiply security checks to avoid crashes on wrongly provided string data #4751
- REVIEWED: Checking `NULL` input on functions getting `const char *text`, to avoid crashes - REVIEWED: `strcpy()` usage, prioritize `strncpy()` with limited copy to buffer size - REPLACED: `strlen()` by `TextLength()` on [rtext] module - REVIEWED: Replaced some early returns (but keeping others, for easier code following)
This commit is contained in:
15
src/raudio.c
15
src/raudio.c
@@ -1140,7 +1140,7 @@ bool ExportWaveAsCode(Wave wave, const char *fileName)
|
||||
|
||||
// Get file name from path and convert variable name to uppercase
|
||||
char varFileName[256] = { 0 };
|
||||
strcpy(varFileName, GetFileNameWithoutExt(fileName));
|
||||
strncpy(varFileName, GetFileNameWithoutExt(fileName), 256 - 1);
|
||||
for (int i = 0; varFileName[i] != '\0'; i++) if (varFileName[i] >= 'a' && varFileName[i] <= 'z') { varFileName[i] = varFileName[i] - 32; }
|
||||
|
||||
// Add wave information
|
||||
@@ -2739,11 +2739,13 @@ static const char *GetFileExtension(const char *fileName)
|
||||
return dot;
|
||||
}
|
||||
|
||||
// String pointer reverse break: returns right-most occurrence of charset in s
|
||||
static const char *strprbrk(const char *s, const char *charset)
|
||||
// String pointer reverse break: returns right-most occurrence of charset in text
|
||||
static const char *strprbrk(const char *text, const char *charset)
|
||||
{
|
||||
const char *latestMatch = NULL;
|
||||
for (; s = strpbrk(s, charset), s != NULL; latestMatch = s++) { }
|
||||
|
||||
for (; (text != NULL) && (text = strpbrk(text, charset)); latestMatch = text++) { }
|
||||
|
||||
return latestMatch;
|
||||
}
|
||||
|
||||
@@ -2766,7 +2768,7 @@ static const char *GetFileNameWithoutExt(const char *filePath)
|
||||
static char fileName[MAX_FILENAMEWITHOUTEXT_LENGTH] = { 0 };
|
||||
memset(fileName, 0, MAX_FILENAMEWITHOUTEXT_LENGTH);
|
||||
|
||||
if (filePath != NULL) strcpy(fileName, GetFileName(filePath)); // Get filename with extension
|
||||
if (filePath != NULL) strncpy(fileName, GetFileName(filePath), MAX_FILENAMEWITHOUTEXT_LENGTH - 1); // Get filename with extension
|
||||
|
||||
int size = (int)strlen(fileName); // Get size in bytes
|
||||
|
||||
@@ -2864,7 +2866,8 @@ static bool SaveFileText(const char *fileName, char *text)
|
||||
|
||||
if (file != NULL)
|
||||
{
|
||||
int count = fprintf(file, "%s", text);
|
||||
int count = 0;
|
||||
if (text != NULL) count = fprintf(file, "%s", text);
|
||||
|
||||
if (count == 0) TRACELOG(LOG_WARNING, "FILEIO: [%s] Failed to write text file", fileName);
|
||||
else TRACELOG(LOG_INFO, "FILEIO: [%s] Text file saved successfully", fileName);
|
||||
|
||||
Reference in New Issue
Block a user