VYPR
High severity7.5NVD Advisory· Published Jun 16, 2016· Updated May 6, 2026

CVE-2016-3202

CVE-2016-3202

Description

The Microsoft (1) Chakra JavaScript, (2) JScript, and (3) VBScript engines, as used in Microsoft Internet Explorer 10 and 11 and Microsoft Edge, allow remote attackers to execute arbitrary code or cause a denial of service (memory corruption) via a crafted web site, aka "Scripting Engine Memory Corruption Vulnerability."

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
Microsoft.ChakraCoreNuGet
< 1.2.0.01.2.0.0

Affected products

3

Patches

1
ff9067ebe9e1

Chakra Assert : sym->HasScopeSlot()

https://github.com/chakra-core/ChakraCoreIan HallidayMay 14, 2016via ghsa
1 file changed · +16 6
  • lib/Runtime/ByteCode/ByteCodeEmitter.cpp+16 6 modified
    @@ -1799,37 +1799,47 @@ void ByteCodeGenerator::InitScopeSlotArray(FuncInfo * funcInfo)
                 propertyIdsForScopeSlotArray[i] = Js::Constants::NoProperty;
             }
     #endif
    +        auto setPropertyIdForScopeSlotArray =
    +            [scopeSlotCount, propertyIdsForScopeSlotArray]
    +            (Js::PropertyId slot, Js::PropertyId propId)
    +        {
    +            if (slot < 0 || (uint)slot >= scopeSlotCount)
    +            {
    +                Js::Throw::FatalInternalError();
    +            }
    +            propertyIdsForScopeSlotArray[slot] = propId;
    +        };
     
    -        auto setPropIdsForScopeSlotArray = [funcInfo, propertyIdsForScopeSlotArray](Symbol *const sym)
    +        auto setPropIdsForScopeSlotArray = [funcInfo, setPropertyIdForScopeSlotArray](Symbol *const sym)
             {
                 if (sym->NeedsSlotAlloc(funcInfo))
                 {
                     // All properties should get correct propertyId here.
                     Assert(sym->HasScopeSlot()); // We can't allocate scope slot now. Any symbol needing scope slot must have allocated it before this point.
    -                propertyIdsForScopeSlotArray[sym->GetScopeSlot()] = sym->EnsurePosition(funcInfo);
    +                setPropertyIdForScopeSlotArray(sym->GetScopeSlot(), sym->EnsurePosition(funcInfo));
                 }
             };
     
             funcInfo->GetBodyScope()->ForEachSymbol(setPropIdsForScopeSlotArray);
     
             if (funcInfo->thisScopeSlot != Js::Constants::NoRegister)
             {
    -            propertyIdsForScopeSlotArray[funcInfo->thisScopeSlot] = Js::PropertyIds::_lexicalThisSlotSymbol;
    +            setPropertyIdForScopeSlotArray(funcInfo->thisScopeSlot, Js::PropertyIds::_lexicalThisSlotSymbol);
             }
     
             if (funcInfo->newTargetScopeSlot != Js::Constants::NoRegister)
             {
    -            propertyIdsForScopeSlotArray[funcInfo->newTargetScopeSlot] = Js::PropertyIds::_lexicalNewTargetSymbol;
    +            setPropertyIdForScopeSlotArray(funcInfo->newTargetScopeSlot, Js::PropertyIds::_lexicalNewTargetSymbol);
             }
     
             if (funcInfo->superScopeSlot != Js::Constants::NoRegister)
             {
    -            propertyIdsForScopeSlotArray[funcInfo->superScopeSlot] = Js::PropertyIds::_superReferenceSymbol;
    +            setPropertyIdForScopeSlotArray(funcInfo->superScopeSlot, Js::PropertyIds::_superReferenceSymbol);
             }
     
             if (funcInfo->superCtorScopeSlot != Js::Constants::NoRegister)
             {
    -            propertyIdsForScopeSlotArray[funcInfo->superCtorScopeSlot] = Js::PropertyIds::_superCtorReferenceSymbol;
    +            setPropertyIdForScopeSlotArray(funcInfo->superCtorScopeSlot, Js::PropertyIds::_superCtorReferenceSymbol);
             }
     
     #if DEBUG
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

9

News mentions

0

No linked articles in our index yet.