From ac99d85bb5996db5c3d32a832359e6ce4bfbbbf2 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 23 Aug 2016 14:10:02 -0700 Subject: [PATCH 1/2] Handle Semver parse errors in NpmGetCatalogCommand for 'versions' field **Bug** Semver parsing is failing for version strings like `'latest'`. This prevents users from downloading the npm package catalog. **Fix** Instead of blocking users in this case, we should catch these exceptions and continue on. --- Nodejs/Product/Npm/SPI/NpmGetCatalogCommand.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Nodejs/Product/Npm/SPI/NpmGetCatalogCommand.cs b/Nodejs/Product/Npm/SPI/NpmGetCatalogCommand.cs index de820fa24..d5ca6e175 100644 --- a/Nodejs/Product/Npm/SPI/NpmGetCatalogCommand.cs +++ b/Nodejs/Product/Npm/SPI/NpmGetCatalogCommand.cs @@ -249,7 +249,7 @@ private IPackage ReadPackage(JsonTextReader jsonReader, NodeModuleBuilder builde var versions = module["versions"]; if (versions != null) { - builder.AvailableVersions = GetVersions(versions); + builder.AvailableVersions = GetVersions(builder.Name, versions); } AddKeywords(builder, module["keywords"]); @@ -281,14 +281,19 @@ private static void InsertCatalogEntry(SQLiteConnection db, IPackage package) { } - private IEnumerable GetVersions(JToken versionsToken) { - IEnumerable versionStrings = versionsToken.OfType().Select(v => (string)v.Name); + private IEnumerable GetVersions(string name, JToken versionsToken) { + var versionStrings = versionsToken.OfType().Select(v => (string)v.Name); foreach (var versionString in versionStrings) { if (!string.IsNullOrEmpty(versionString)) { - yield return SemverVersion.Parse(versionString); + SemverVersion ver; + try { + ver = SemverVersion.Parse(versionString); + } catch (SemverVersionFormatException) { + continue; + } + yield return ver; } } - } private static void AddKeywords(NodeModuleBuilder builder, JToken keywords) { From 26c9191ced3b82bb293e465043914bc79825ccec Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 23 Aug 2016 14:37:00 -0700 Subject: [PATCH 2/2] Remove added parameter --- Nodejs/Product/Npm/SPI/NpmGetCatalogCommand.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Nodejs/Product/Npm/SPI/NpmGetCatalogCommand.cs b/Nodejs/Product/Npm/SPI/NpmGetCatalogCommand.cs index d5ca6e175..724d2fbb4 100644 --- a/Nodejs/Product/Npm/SPI/NpmGetCatalogCommand.cs +++ b/Nodejs/Product/Npm/SPI/NpmGetCatalogCommand.cs @@ -249,7 +249,7 @@ private IPackage ReadPackage(JsonTextReader jsonReader, NodeModuleBuilder builde var versions = module["versions"]; if (versions != null) { - builder.AvailableVersions = GetVersions(builder.Name, versions); + builder.AvailableVersions = GetVersions(versions); } AddKeywords(builder, module["keywords"]); @@ -281,7 +281,7 @@ private static void InsertCatalogEntry(SQLiteConnection db, IPackage package) { } - private IEnumerable GetVersions(string name, JToken versionsToken) { + private IEnumerable GetVersions(JToken versionsToken) { var versionStrings = versionsToken.OfType().Select(v => (string)v.Name); foreach (var versionString in versionStrings) { if (!string.IsNullOrEmpty(versionString)) {