summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorIoIxD <[email protected]>2024-02-01 13:16:57 -0700
committerGitHub <[email protected]>2024-02-01 21:16:57 +0100
commit7ec43022c177cbf00b27c9e9ab067bd6889957a4 (patch)
tree138807064b852e1a3fe161a14f01fe021797fcc3
parentc0b081fac042ebc5d31d99887faaf27806a4e80b (diff)
downloadraylib-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.c5
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");