mirror of
https://github.com/Detanup01/gbe_fork.git
synced 2025-09-10 12:03:06 +02:00
Clamp callback result output instead of failing
This commit is contained in:
parent
cb7b120a8b
commit
3da4aa5716
1 changed files with 18 additions and 2 deletions
|
@ -121,9 +121,25 @@ bool SteamCallResults::callback_result(SteamAPICall_t api_call, void *copy_to, u
|
||||||
});
|
});
|
||||||
if (cb_result != callresults.end()) {
|
if (cb_result != callresults.end()) {
|
||||||
if (!cb_result->call_completed()) return false;
|
if (!cb_result->call_completed()) return false;
|
||||||
if (cb_result->result.size() > size) return false;
|
|
||||||
|
|
||||||
memcpy(copy_to, &(cb_result->result[0]), cb_result->result.size());
|
// Real Steam just does nothing and returns true if nullptr is passed.
|
||||||
|
if (!copy_to) return true;
|
||||||
|
|
||||||
|
memset(copy_to, 0, size);
|
||||||
|
|
||||||
|
size_t resultsize = cb_result->result.size();
|
||||||
|
if (size > resultsize) {
|
||||||
|
PRINT_DEBUG("provided buffer is larger than callback data (%u > %u), code should possibly be updated to new sdk",
|
||||||
|
size,
|
||||||
|
resultsize);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Output buffer being too small is not a failure condition.
|
||||||
|
// This behavior is needed for RemoteStorageFileShareResult_t which was made larger in sdk v1.28x
|
||||||
|
// without even the interface version being bumped.
|
||||||
|
size_t outsize = std::min(resultsize, static_cast<size_t>(size));
|
||||||
|
|
||||||
|
memcpy(copy_to, cb_result->result.data(), outsize);
|
||||||
cb_result->to_delete = true;
|
cb_result->to_delete = true;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Reference in a new issue