Firefox · Core
CVE-2026-8953
UAF in Core
Overview
Medium
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Changed Functions
| Function | Change | Notes |
|---|---|---|
AccessibleEnumeratoraccessible/windows/msaa/MsaaAccessible.cpp |
modified | |
foraccessible/windows/msaa/MsaaAccessible.cpp |
modified | |
Cloneaccessible/windows/msaa/MsaaAccessible.cpp |
modified |
Files Changed
accessible/windows/msaa/MsaaAccessible.cpp
Patch
diff --git a/accessible/windows/msaa/MsaaAccessible.cpp b/accessible/windows/msaa/MsaaAccessible.cpp
index e9025f46d8d..8fe30455891 100644
--- a/accessible/windows/msaa/MsaaAccessible.cpp
+++ b/accessible/windows/msaa/MsaaAccessible.cpp
@@ -917,7 +917,13 @@ MsaaAccessible::get_accFocus(
class AccessibleEnumerator final : public IEnumVARIANT {
public:
explicit AccessibleEnumerator(const nsTArray<Accessible*>& aArray)
- : mArray(aArray.Clone()), mCurIndex(0) {}
+ : mCurIndex(0) {
+ mArray.SetCapacity(aArray.Length());
+ for (Accessible* acc : aArray) {
+ mArray.AppendElement(MsaaAccessible::GetFrom(acc));
+ }
+ }
+
AccessibleEnumerator(const AccessibleEnumerator& toCopy)
: mArray(toCopy.mArray.Clone()), mCurIndex(toCopy.mCurIndex) {}
~AccessibleEnumerator() {}
@@ -936,7 +942,7 @@ class AccessibleEnumerator final : public IEnumVARIANT {
STDMETHODIMP Clone(IEnumVARIANT FAR* FAR* ppenum);
private:
- nsTArray<Accessible*> mArray;
+ nsTArray<RefPtr<MsaaAccessible>> mArray;
uint32_t mCurIndex;
};
@@ -971,8 +977,9 @@ AccessibleEnumerator::Next(unsigned long celt, VARIANT FAR* rgvar,
// Copy the elements of the array into rgvar.
for (uint32_t i = 0; i < celt; ++i, ++mCurIndex) {
+ RefPtr<IDispatch> disp = mArray[mCurIndex];
rgvar[i].vt = VT_DISPATCH;
- rgvar[i].pdispVal = MsaaAccessible::NativeAccessible(mArray[mCurIndex]);
+ disp.forget(&rgvar[i].pdispVal);
}
if (pceltFetched) *pceltFetched = celt;
@@ -982,8 +989,8 @@ AccessibleEnumerator::Next(unsigned long celt, VARIANT FAR* rgvar,
STDMETHODIMP
AccessibleEnumerator::Clone(IEnumVARIANT FAR* FAR* ppenum) {
- *ppenum = new AccessibleEnumerator(*this);
- NS_ADDREF(*ppenum);
+ RefPtr newEnum = new AccessibleEnumerator(*this);
+ newEnum.forget(ppenum);
return S_OK;
}
Loading diff…
References
On This Page