Bug 1427171 - prevent null pointer dereference when using return pointer from aContext->ARIARoleMap(). draft
authorAndi-Bogdan Postelnicu <bpostelnicu@mozilla.com>
Wed, 27 Dec 2017 13:36:56 +0200
changeset 714640 217e753b4df6267a32571d3601e92d163362caba
parent 714633 f5a1cb52c12e8fbcf2e3b5a675fe2a84d43507a7
child 744639 a3d77d92311758a2a73b64398194a9d413f3add3
push id93980
push userbmo:bpostelnicu@mozilla.com
push dateWed, 27 Dec 2017 11:37:21 +0000
bugs1427171
milestone59.0a1
Bug 1427171 - prevent null pointer dereference when using return pointer from aContext->ARIARoleMap(). MozReview-Commit-ID: B2FkPtOSm4S
accessible/base/nsAccessibilityService.cpp
--- a/accessible/base/nsAccessibilityService.cpp
+++ b/accessible/base/nsAccessibilityService.cpp
@@ -1195,29 +1195,29 @@ nsAccessibilityService::CreateAccessible
       }
     }
 
     // If table has strong ARIA role then all table descendants shouldn't
     // expose their native roles.
     if (!roleMapEntry && newAcc && aContext->HasStrongARIARole()) {
       if (frame->AccessibleType() == eHTMLTableRowType) {
         const nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
-        if (!contextRoleMap->IsOfType(eTable))
+        if (contextRoleMap && !contextRoleMap->IsOfType(eTable))
           roleMapEntry = &aria::gEmptyRoleMap;
 
       } else if (frame->AccessibleType() == eHTMLTableCellType &&
                  aContext->ARIARoleMap() == &aria::gEmptyRoleMap) {
         roleMapEntry = &aria::gEmptyRoleMap;
 
       } else if (content->IsAnyOfHTMLElements(nsGkAtoms::dt,
                                               nsGkAtoms::li,
                                               nsGkAtoms::dd) ||
                  frame->AccessibleType() == eHTMLLiType) {
         const nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
-        if (!contextRoleMap->IsOfType(eList))
+        if (contextRoleMap && !contextRoleMap->IsOfType(eList))
           roleMapEntry = &aria::gEmptyRoleMap;
       }
     }
   }
 
   // Accessible XBL types and deck stuff are used in XUL only currently.
   if (!newAcc && content->IsXULElement()) {
     // No accessible for not selected deck panel and its children.