From cd94659bf8e4a09233751b2c4acc5c6abfa74bd5 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 11 Mar 2016 14:04:05 -0800 Subject: [PATCH 1/3] Fix for #684, null dereference for incomplete for loop Just adds a null check before setting parent on declarations. --- Nodejs/Product/Analysis/JavaScript/declaration.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Nodejs/Product/Analysis/JavaScript/declaration.cs b/Nodejs/Product/Analysis/JavaScript/declaration.cs index 4232da954..cd6da6f75 100644 --- a/Nodejs/Product/Analysis/JavaScript/declaration.cs +++ b/Nodejs/Product/Analysis/JavaScript/declaration.cs @@ -56,7 +56,8 @@ public VariableDeclaration[] Variables { set { for (int i = 0; i < value.Length; i++) { - value[i].Parent = this; + if (value[i] != null) + value[i].Parent = this; } m_list = value; } From 6e57bde0fb211f41f6ae83946deed5cb6a73bd47 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 28 Mar 2016 11:48:49 -0700 Subject: [PATCH 2/3] Use external check for null variable declarations --- Nodejs/Product/Analysis/JavaScript/declaration.cs | 3 ++- Nodejs/Product/Analysis/JavaScript/jsparser.cs | 15 ++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Nodejs/Product/Analysis/JavaScript/declaration.cs b/Nodejs/Product/Analysis/JavaScript/declaration.cs index cd6da6f75..7894656ed 100644 --- a/Nodejs/Product/Analysis/JavaScript/declaration.cs +++ b/Nodejs/Product/Analysis/JavaScript/declaration.cs @@ -56,8 +56,9 @@ public VariableDeclaration[] Variables { set { for (int i = 0; i < value.Length; i++) { - if (value[i] != null) + if (value[i] != null) { value[i].Parent = this; + } } m_list = value; } diff --git a/Nodejs/Product/Analysis/JavaScript/jsparser.cs b/Nodejs/Product/Analysis/JavaScript/jsparser.cs index a670492fa..d8684f5b6 100644 --- a/Nodejs/Product/Analysis/JavaScript/jsparser.cs +++ b/Nodejs/Product/Analysis/JavaScript/jsparser.cs @@ -22,6 +22,7 @@ using System.Reflection; using System.Runtime.Serialization; using Microsoft.Ajax.Utilities; +using System.Linq; namespace Microsoft.NodejsTools.Parsing { @@ -1086,7 +1087,7 @@ private Statement ParseForStatement() Statement lhs = null; Statement initializer = null; int headerEnd = -1; - List varList = new List(); + var varList = new List(); try { if (JSToken.Var == _curToken @@ -1108,16 +1109,20 @@ private Statement ParseForStatement() } var varInitializer = ParseIdentifierInitializer(JSToken.In); - varList.Add(varInitializer); - UpdateWithOtherNode(declaration, varInitializer); + if (varInitializer != null) { + varList.Add(varInitializer); + UpdateWithOtherNode(declaration, varInitializer); + } // a list of variable initializers is allowed only in a for(;;) while (JSToken.Comma == _curToken) { isForIn = false; varInitializer = ParseIdentifierInitializer(JSToken.In); - varList.Add(varInitializer); - UpdateWithOtherNode(declaration, initializer); + if (varInitializer != null) { + varList.Add(varInitializer); + UpdateWithOtherNode(declaration, initializer); + } //initializer = new Comma(initializer.context.CombineWith(var.context), initializer, var); } From 699f8fcfad776d73009cf6a30fa37f76d110a694 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 29 Mar 2016 10:31:40 -0700 Subject: [PATCH 3/3] Remove using statement, remove null check --- Nodejs/Product/Analysis/JavaScript/declaration.cs | 4 +--- Nodejs/Product/Analysis/JavaScript/jsparser.cs | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Nodejs/Product/Analysis/JavaScript/declaration.cs b/Nodejs/Product/Analysis/JavaScript/declaration.cs index 7894656ed..4232da954 100644 --- a/Nodejs/Product/Analysis/JavaScript/declaration.cs +++ b/Nodejs/Product/Analysis/JavaScript/declaration.cs @@ -56,9 +56,7 @@ public VariableDeclaration[] Variables { set { for (int i = 0; i < value.Length; i++) { - if (value[i] != null) { - value[i].Parent = this; - } + value[i].Parent = this; } m_list = value; } diff --git a/Nodejs/Product/Analysis/JavaScript/jsparser.cs b/Nodejs/Product/Analysis/JavaScript/jsparser.cs index d8684f5b6..b3e975b1e 100644 --- a/Nodejs/Product/Analysis/JavaScript/jsparser.cs +++ b/Nodejs/Product/Analysis/JavaScript/jsparser.cs @@ -18,11 +18,9 @@ using System.Collections.Generic; using System.Diagnostics; using System.Globalization; -using System.IO; -using System.Reflection; using System.Runtime.Serialization; using Microsoft.Ajax.Utilities; -using System.Linq; + namespace Microsoft.NodejsTools.Parsing {