Skip to content

Commit aba0507

Browse files
committed
[CVE-2017-0134 CVE-2017-0137] add conversion checks after calls to IsConcatSpreadable
Signed-off-by: Michael Holman <Michael.Holman@microsoft.com>
1 parent f778167 commit aba0507

1 file changed

Lines changed: 14 additions & 3 deletions

File tree

lib/Runtime/Library/JavascriptArray.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3149,7 +3149,13 @@ namespace Js
31493149
{
31503150
Var aItem = args[idxArg];
31513151

3152-
if (scriptContext->GetConfig()->IsES6IsConcatSpreadableEnabled() && !JavascriptOperators::IsConcatSpreadable(aItem))
3152+
bool concatSpreadable = !scriptContext->GetConfig()->IsES6IsConcatSpreadableEnabled() || JavascriptOperators::IsConcatSpreadable(aItem);
3153+
if (!JavascriptNativeIntArray::Is(pDestArray))
3154+
{
3155+
ConcatArgs<uint>(pDestArray, remoteTypeIds, args, scriptContext, idxArg, idxDest);
3156+
return pDestArray;
3157+
}
3158+
if(!concatSpreadable)
31533159
{
31543160
pDestArray->SetItem(idxDest, aItem, PropertyOperation_ThrowIfNotExtensible);
31553161
idxDest = idxDest + 1;
@@ -3213,9 +3219,14 @@ namespace Js
32133219
{
32143220
Var aItem = args[idxArg];
32153221

3216-
if (scriptContext->GetConfig()->IsES6IsConcatSpreadableEnabled() && !JavascriptOperators::IsConcatSpreadable(aItem))
3222+
bool concatSpreadable = !scriptContext->GetConfig()->IsES6IsConcatSpreadableEnabled() || JavascriptOperators::IsConcatSpreadable(aItem);
3223+
if (!JavascriptNativeFloatArray::Is(pDestArray))
3224+
{
3225+
ConcatArgs<uint>(pDestArray, remoteTypeIds, args, scriptContext, idxArg, idxDest);
3226+
return pDestArray;
3227+
}
3228+
if (!concatSpreadable)
32173229
{
3218-
32193230
pDestArray->SetItem(idxDest, aItem, PropertyOperation_ThrowIfNotExtensible);
32203231

32213232
idxDest = idxDest + 1;

0 commit comments

Comments
 (0)