aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Snover2017-09-03 16:33:22 -0500
committerColin Snover2017-09-03 20:00:23 -0500
commitd2b4e16ab2bd28ce8b39a6330683228bd48950c2 (patch)
tree6ebb5bfa62c02ec418a2d76d0fe0c484ab01dc0f
parenta2b05b5c6302e8755448de66124fb9be81eee942 (diff)
downloadscummvm-rg350-d2b4e16ab2bd28ce8b39a6330683228bd48950c2.tar.gz
scummvm-rg350-d2b4e16ab2bd28ce8b39a6330683228bd48950c2.tar.bz2
scummvm-rg350-d2b4e16ab2bd28ce8b39a6330683228bd48950c2.zip
SDL: Fix unsafe sprintf usage
Translation strings come from external data sources and can cause a stack buffer overflow here just by accidentally (or maliciously) being too long.
-rw-r--r--backends/graphics/surfacesdl/surfacesdl-graphics.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
index 180ab421cf..f84c09f535 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
@@ -2446,20 +2446,20 @@ bool SurfaceSdlGraphicsManager::handleScalerHotkeys(Common::KeyCode key) {
setFeatureState(OSystem::kFeatureAspectRatioCorrection, !_videoMode.aspectRatioCorrection);
endGFXTransaction();
#ifdef USE_OSD
- char buffer[128];
+ Common::String message;
if (_videoMode.aspectRatioCorrection)
- sprintf(buffer, "%s\n%d x %d -> %d x %d",
+ message = Common::String::format("%s\n%d x %d -> %d x %d",
_("Enabled aspect ratio correction"),
_videoMode.screenWidth, _videoMode.screenHeight,
_hwscreen->w, _hwscreen->h
);
else
- sprintf(buffer, "%s\n%d x %d -> %d x %d",
+ message = Common::String::format("%s\n%d x %d -> %d x %d",
_("Disabled aspect ratio correction"),
_videoMode.screenWidth, _videoMode.screenHeight,
_hwscreen->w, _hwscreen->h
);
- displayMessageOnOSD(buffer);
+ displayMessageOnOSD(message.c_str());
#endif
internUpdateScreen();
return true;
@@ -2526,14 +2526,13 @@ bool SurfaceSdlGraphicsManager::handleScalerHotkeys(Common::KeyCode key) {
g++;
}
if (newScalerName) {
- char buffer[128];
- sprintf(buffer, "%s %s\n%d x %d -> %d x %d",
+ const Common::String message = Common::String::format(
+ "%s %s\n%d x %d -> %d x %d",
_("Active graphics filter:"),
newScalerName,
_videoMode.screenWidth, _videoMode.screenHeight,
- _hwscreen->w, _hwscreen->h
- );
- displayMessageOnOSD(buffer);
+ _hwscreen->w, _hwscreen->h);
+ displayMessageOnOSD(message.c_str());
}
#endif
internUpdateScreen();