Avoid undefined behaviour const_casting std::string c_str()
Use non-const data() instead See: #224
This commit is contained in:
@@ -32,7 +32,7 @@ static void Load_DBGL()
|
||||
size_t length = SlGetFieldLength();
|
||||
if (length) {
|
||||
_loadgame_DBGL_data.resize(length);
|
||||
ReadBuffer::GetCurrent()->CopyBytes(reinterpret_cast<byte *>(const_cast<char *>(_loadgame_DBGL_data.data())), length);
|
||||
ReadBuffer::GetCurrent()->CopyBytes(reinterpret_cast<byte *>(_loadgame_DBGL_data.data()), length);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ static void Check_DBGL()
|
||||
size_t length = SlGetFieldLength();
|
||||
if (length) {
|
||||
_load_check_data.debug_log_data.resize(length);
|
||||
ReadBuffer::GetCurrent()->CopyBytes(reinterpret_cast<byte *>(const_cast<char *>(_load_check_data.debug_log_data.data())), length);
|
||||
ReadBuffer::GetCurrent()->CopyBytes(reinterpret_cast<byte *>(_load_check_data.debug_log_data.data()), length);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ static void Load_DBGC()
|
||||
size_t length = SlGetFieldLength();
|
||||
if (length) {
|
||||
_loadgame_DBGC_data.resize(length);
|
||||
ReadBuffer::GetCurrent()->CopyBytes(reinterpret_cast<byte *>(const_cast<char *>(_loadgame_DBGC_data.data())), length);
|
||||
ReadBuffer::GetCurrent()->CopyBytes(reinterpret_cast<byte *>(_loadgame_DBGC_data.data()), length);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ static void Check_DBGC()
|
||||
size_t length = SlGetFieldLength();
|
||||
if (length) {
|
||||
_load_check_data.debug_config_data.resize(length);
|
||||
ReadBuffer::GetCurrent()->CopyBytes(reinterpret_cast<byte *>(const_cast<char *>(_load_check_data.debug_config_data.data())), length);
|
||||
ReadBuffer::GetCurrent()->CopyBytes(reinterpret_cast<byte *>(_load_check_data.debug_config_data.data()), length);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -635,7 +635,7 @@ static void Load_SLXI()
|
||||
static void loadVL(const SlxiSubChunkInfo *info, uint32 length)
|
||||
{
|
||||
_sl_xv_version_label.resize(length);
|
||||
ReadBuffer::GetCurrent()->CopyBytes(reinterpret_cast<byte *>(const_cast<char *>(_sl_xv_version_label.c_str())), length);
|
||||
ReadBuffer::GetCurrent()->CopyBytes(reinterpret_cast<byte *>(_sl_xv_version_label.data()), length);
|
||||
}
|
||||
|
||||
static uint32 saveVL(const SlxiSubChunkInfo *info, bool dry_run)
|
||||
|
@@ -1132,20 +1132,20 @@ static void SlStdString(std::string &str, VarType conv)
|
||||
switch (_sl.action) {
|
||||
case SLA_SAVE: {
|
||||
SlWriteArrayLength(str.size());
|
||||
SlCopyBytes(const_cast<char *>(str.data()), str.size());
|
||||
SlCopyBytes(str.data(), str.size());
|
||||
break;
|
||||
}
|
||||
case SLA_LOAD_CHECK:
|
||||
case SLA_LOAD: {
|
||||
size_t len = SlReadArrayLength();
|
||||
str.resize(len);
|
||||
SlCopyBytes(const_cast<char *>(str.c_str()), len);
|
||||
SlCopyBytes(str.data(), len);
|
||||
|
||||
StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK;
|
||||
if ((conv & SLF_ALLOW_CONTROL) != 0) {
|
||||
settings = settings | SVS_ALLOW_CONTROL_CODE;
|
||||
if (IsSavegameVersionBefore(SLV_169)) {
|
||||
char *buf = const_cast<char *>(str.c_str());
|
||||
char *buf = str.data();
|
||||
str.resize(str_fix_scc_encoded(buf, buf + str.size()) - buf);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user