Bug 1389227 - Avoid accessing invalid array index in vr controllers when stopping vibrate; r?kip draft
authorDaosheng Mu <daoshengmu@gmail.com>
Fri, 11 Aug 2017 18:10:29 +0800
changeset 644771 e43ca2cc790ce90f160c700d77753d869ea04472
parent 642204 65507616792c990b1230888612dd7ffc13ed32b4
child 725710 03fc2556c728b612dabc84d30ec0ca24ad6851dd
push id73546
push userbmo:dmu@mozilla.com
push dateFri, 11 Aug 2017 10:19:55 +0000
reviewerskip
bugs1389227
milestone57.0a1
Bug 1389227 - Avoid accessing invalid array index in vr controllers when stopping vibrate; r?kip MozReview-Commit-ID: NR5FLllABm
gfx/vr/gfxVROculus.cpp
gfx/vr/gfxVROpenVR.cpp
--- a/gfx/vr/gfxVROculus.cpp
+++ b/gfx/vr/gfxVROculus.cpp
@@ -1742,17 +1742,18 @@ VRSystemManagerOculus::VibrateHaptic(uin
   controller->VibrateHaptic(mSession->Get(), aHapticIndex, aIntensity, aDuration, aPromiseID);
 }
 
 void
 VRSystemManagerOculus::StopVibrateHaptic(uint32_t aControllerIdx)
 {
   // The session is available after VRDisplay is created
   // at GetHMDs().
-  if (!mSession || !mSession->IsTrackingReady()) {
+  if (!mSession || !mSession->IsTrackingReady() ||
+      (aControllerIdx >= mOculusController.Length())) {
     return;
   }
 
   RefPtr<impl::VRControllerOculus> controller = mOculusController[aControllerIdx];
   MOZ_ASSERT(controller);
 
   controller->StopVibrateHaptic();
 }
--- a/gfx/vr/gfxVROpenVR.cpp
+++ b/gfx/vr/gfxVROpenVR.cpp
@@ -942,17 +942,17 @@ VRSystemManagerOpenVR::VibrateHaptic(uin
   controller->VibrateHaptic(mVRSystem, aHapticIndex, aIntensity, aDuration, aPromiseID);
 }
 
 void
 VRSystemManagerOpenVR::StopVibrateHaptic(uint32_t aControllerIdx)
 {
   // mVRSystem is available after VRDisplay is created
   // at GetHMDs().
-  if (!mVRSystem) {
+  if (!mVRSystem || (aControllerIdx >= mOpenVRController.Length())) {
     return;
   }
 
   RefPtr<impl::VRControllerOpenVR> controller = mOpenVRController[aControllerIdx];
   MOZ_ASSERT(controller);
 
   controller->StopVibrateHaptic();
 }