mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-11-15 19:43:32 +01:00
libstrat: fix potential oob deref in WaitableManager (closes #256)
This commit is contained in:
parent
2894989eb7
commit
bac81f4ccc
@ -212,10 +212,9 @@ class WaitableManager : public SessionManagerBase {
|
||||
/* Wait forever. */
|
||||
rc = svcWaitSynchronization(&handle_index, handles.data(), num_handles, U64_MAX);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
IWaitable *w = wait_list[handle_index];
|
||||
size_t w_ind = std::distance(this->waitables.begin(), std::find(this->waitables.begin(), this->waitables.end(), w));
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
std::for_each(waitables.begin(), waitables.begin() + w_ind, std::mem_fn(&IWaitable::UpdatePriority));
|
||||
result = w;
|
||||
} else if (rc == 0xEA01) {
|
||||
@ -233,6 +232,8 @@ class WaitableManager : public SessionManagerBase {
|
||||
} else if (rc != 0xF601 && rc != 0xE401) {
|
||||
std::abort();
|
||||
} else {
|
||||
IWaitable *w = wait_list[handle_index];
|
||||
size_t w_ind = std::distance(this->waitables.begin(), std::find(this->waitables.begin(), this->waitables.end(), w));
|
||||
this->waitables.erase(this->waitables.begin() + w_ind);
|
||||
std::for_each(waitables.begin(), waitables.begin() + w_ind - 1, std::mem_fn(&IWaitable::UpdatePriority));
|
||||
delete w;
|
||||
|
Loading…
Reference in New Issue
Block a user