From 1f5aad2acaaddada9dc7bf6f8afe5db9cf0c36f9 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 24 Feb 2016 16:11:04 -0800 Subject: [PATCH] Fix null dereference on RootPackage.Homepage RootPackage.Homepage can return null to indicate that no root package exists. This causes two potential null dereferences in `DependencyNode.cs` This fix just adds a null check before accessing the enumerator on the `Homepages` property. --- .../Product/Nodejs/Project/DependencyNode.cs | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Nodejs/Product/Nodejs/Project/DependencyNode.cs b/Nodejs/Product/Nodejs/Project/DependencyNode.cs index bc49c0e97..20dfbfa35 100644 --- a/Nodejs/Product/Nodejs/Project/DependencyNode.cs +++ b/Nodejs/Product/Nodejs/Project/DependencyNode.cs @@ -167,11 +167,13 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText if (cmdGroup == Guids.NodejsNpmCmdSet) { switch (cmd) { case PkgCmdId.cmdidNpmOpenModuleHomepage: - using (var enumerator = this.Package.Homepages.GetEnumerator()) { - if (enumerator.MoveNext() && !string.IsNullOrEmpty(enumerator.Current)) { - result = QueryStatusResult.ENABLED | QueryStatusResult.SUPPORTED; - } else { - result = QueryStatusResult.SUPPORTED; + if (this.Package.Homepages != null) { + using (var enumerator = this.Package.Homepages.GetEnumerator()) { + if (enumerator.MoveNext() && !string.IsNullOrEmpty(enumerator.Current)) { + result = QueryStatusResult.ENABLED | QueryStatusResult.SUPPORTED; + } else { + result = QueryStatusResult.SUPPORTED; + } } } return VSConstants.S_OK; @@ -225,9 +227,11 @@ internal override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecop if (cmdGroup == Guids.NodejsNpmCmdSet) { switch (cmd) { case PkgCmdId.cmdidNpmOpenModuleHomepage: - using (var enumerator = this.Package.Homepages.GetEnumerator()) { - if (enumerator.MoveNext() && !string.IsNullOrEmpty(enumerator.Current)) { - Process.Start(enumerator.Current); + if (this.Package.Homepages != null) { + using (var enumerator = this.Package.Homepages.GetEnumerator()) { + if (enumerator.MoveNext() && !string.IsNullOrEmpty(enumerator.Current)) { + Process.Start(enumerator.Current); + } } } return VSConstants.S_OK;