diff options
| author | IoIxD <[email protected]> | 2024-02-01 13:16:57 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-02-01 21:16:57 +0100 |
| commit | 7ec43022c177cbf00b27c9e9ab067bd6889957a4 (patch) | |
| tree | 138807064b852e1a3fe161a14f01fe021797fcc3 | |
| parent | c0b081fac042ebc5d31d99887faaf27806a4e80b (diff) | |
| download | raylib-7ec43022c177cbf00b27c9e9ab067bd6889957a4.tar.gz raylib-7ec43022c177cbf00b27c9e9ab067bd6889957a4.zip | |
Fix segfault in ExportWaveAsCode (#3769)
`char *txtData = (char *)RL_CALLOC(waveDataSize * 6 + 2000, sizeof(char));`
assumes every chunk being added to txtData is 6 bytes. This is not always true, sometimes a newline is involved and the data becomes 12 bytes instead, and this can cause a random segfault.
This commit changes `6` to `12`, and explains why in the comment.
| -rw-r--r-- | src/raudio.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/raudio.c b/src/raudio.c index 59d49c96..4d0de45a 100644 --- a/src/raudio.c +++ b/src/raudio.c @@ -1081,8 +1081,9 @@ bool ExportWaveAsCode(Wave wave, const char *fileName) int waveDataSize = wave.frameCount*wave.channels*wave.sampleSize/8; // NOTE: Text data buffer size is estimated considering wave data size in bytes - // and requiring 6 char bytes for every byte: "0x00, " - char *txtData = (char *)RL_CALLOC(waveDataSize*6 + 2000, sizeof(char)); + // and requiring 12 char bytes for every byte; the actual size varies, but + // the longest possible char being appended is "%.4ff,\n ", which is 12 bytes. + char *txtData = (char *)RL_CALLOC(waveDataSize*12 + 2000, sizeof(char)); int byteCount = 0; byteCount += sprintf(txtData + byteCount, "\n//////////////////////////////////////////////////////////////////////////////////\n"); |
