aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorBLooperZ2019-12-31 22:12:45 +0200
committerEugene Sandulenko2020-01-01 00:31:21 +0100
commitc10ed91c3e4c96ca26fda15137f2d65655ecc742 (patch)
treea49c3a442559ce9e480fe0399ecba05c6ec32c27 /engines
parent7f8b584aa3e77e1d886b6ea3b1058305b03fe765 (diff)
downloadscummvm-rg350-c10ed91c3e4c96ca26fda15137f2d65655ecc742.tar.gz
scummvm-rg350-c10ed91c3e4c96ca26fda15137f2d65655ecc742.tar.bz2
scummvm-rg350-c10ed91c3e4c96ca26fda15137f2d65655ecc742.zip
SCUMM: avoid allocating large buffers on stack
Diffstat (limited to 'engines')
-rw-r--r--engines/scumm/string.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp
index 633a67792c..c2a07fa54b 100644
--- a/engines/scumm/string.cpp
+++ b/engines/scumm/string.cpp
@@ -478,6 +478,13 @@ void ScummEngine::fakeBidiString(char *ltext, bool ignoreVerb) {
int start = 0;
char *text = ltext + ll;
char *current = text;
+
+ int bufferSize = 384;
+ char * const buff = (char *)calloc(sizeof(char), bufferSize);
+ assert(buff);
+ char * const stack = (char *)calloc(sizeof(char), bufferSize);
+ assert(stack);
+
while (1) {
if (*current == 13 || *current == 0 || *current == -1 || *current == -2) {
@@ -490,10 +497,8 @@ void ScummEngine::fakeBidiString(char *ltext, bool ignoreVerb) {
continue;
}
- char buff[384];
- memset(buff, 0, sizeof(buff));
- char stack[384];
- memset(stack, 0, sizeof(stack));
+ memset(buff, 0, bufferSize);
+ memset(stack, 0, bufferSize);
int sthead = 0;
char last = '\0';
@@ -546,6 +551,9 @@ void ScummEngine::fakeBidiString(char *ltext, bool ignoreVerb) {
ltext[start + ipos + ll] = '\x80';
ltext[start + ipos + ll + 1] = '\0';
}
+
+ free(buff);
+ free(stack);
}
void ScummEngine::CHARSET_1() {