Skip to content

Commit 79641ce

Browse files
committed
fix: Not failing when cannot extract package from hintpath. Skipping and logging
1 parent 37663ee commit 79641ce

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

lib/index.js

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ var Dependecy = require('./dependency');
55
var findFolder = require('./find-folder');
66
var path = require('path');
77
var parseNuspec = require('./nuspec-parser');
8+
var debug = require('debug')('snyk');
89

910
function determineManifestType (filename) {
1011
switch (true) {
@@ -65,6 +66,7 @@ module.exports = {
6566
var installedPackages = [];
6667
switch (manifestType) {
6768
case 'project.json': {
69+
debug('Trying to parse project.json manifest');
6870
var rawDependencies = JSON.parse(fileContent).dependencies;
6971
if (rawDependencies) {
7072
for (var name in rawDependencies) {
@@ -80,6 +82,7 @@ module.exports = {
8082
break;
8183
}
8284
case 'packages.config': {
85+
debug('Trying to parse packages.config manifest');
8386
parseXML(fileContent, function scanPackagesConfig(err, result) {
8487
if (err) {
8588
reject(err);
@@ -99,17 +102,24 @@ module.exports = {
99102
break;
100103
}
101104
case '.csproj': {
105+
debug('Trying to parse .csproj manifest');
102106
parseXML(fileContent, function scanCsprojContent(err, result) {
103107
if (err) {
104108
reject(err);
105109
} else {
106110
(result.Project.ItemGroup || []).forEach(function (itemGroup) {
107111
(itemGroup.Reference || []).forEach(function (referenceItem) {
108112
if (referenceItem.HintPath) {
109-
var installedDependency =
110-
Dependecy.from.csprojEntry(referenceItem);
111-
if (installedDependency.name.indexOf('System.') !== 0) {
112-
installedPackages.push(installedDependency);
113+
try {
114+
var installedDependency =
115+
Dependecy.from.csprojEntry(referenceItem);
116+
if (installedDependency.name.indexOf('System.') !== 0) {
117+
installedPackages.push(installedDependency);
118+
}
119+
}
120+
catch (err) {
121+
debug('Could not parse package name. Skipping');
122+
// gracefully continue
113123
}
114124
}
115125
});
@@ -121,6 +131,7 @@ module.exports = {
121131
}
122132
}
123133
}).then(function scanInstalled(installedPackages) {
134+
debug('Located ' + installedPackages.length + ' packages in manifest');
124135
function injectPath(dep) {
125136
dep.path = path.resolve(
126137
packagesFolder,
@@ -130,8 +141,10 @@ module.exports = {
130141
installedPackages.forEach(function (entry) {
131142
injectPath(entry);
132143
flattendPackageList[entry.name] = entry;
144+
debug('Entry: ' + entry.name + ' -> ' + entry.path);
133145
});
134146
try {
147+
debug('Trying to read installed packaged folder: ' + packagesFolder);
135148
fs.readdirSync(packagesFolder)
136149
.filter(function (name) {
137150
return name.slice(0, 7).toLowerCase() !== 'system.'
@@ -144,6 +157,8 @@ module.exports = {
144157
flattendPackageList[dep.name] = flattendPackageList[dep.name] || dep;
145158
});
146159
} catch (error) {
160+
debug('Could not complete installed packages folder scanning');
161+
debug(error);
147162
// could not read installed packages folder,
148163
// continue only with manifest list
149164
}
@@ -154,20 +169,24 @@ module.exports = {
154169
flattendPackageList = sorted;
155170
}).then(function fetchNugetInformationFromPackages() {
156171
// initiate collecting information from .nuget files on installed packages
172+
debug('Trying to analyze .nuspec files');
157173
var nuspecParserChain = [];
158174
for (var name in flattendPackageList) {
159175
var dep = flattendPackageList[name];
176+
debug('...' + name);
160177
nuspecParserChain.push(parseNuspec(dep));
161178
}
162179
return Promise.all(nuspecParserChain);
163180
}).then(function processNugetInformation(nuspecResolutionChain) {
164181
nuspecResolutionChain.forEach(function (resolution) {
165182
if (!resolution) return; // jscs:ignore
183+
debug('.nuspec analyzed for ' + resolution.name);
166184
nuspecResolutions[resolution.name] = resolution;
167185
});
168186
}).then(function buildDependencyTree() {
169187
// .nuget parsing is complete, returned as array of promise resolutions
170188
// now the flat list should be rebuilt as a tree
189+
debug('Building dependency tree');
171190
function buildTree(node, requiredChildren, repository) {
172191
var resolutionName = node.name + '@' + node.version;
173192
node.from = node.from.concat(resolutionName);

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
},
2626
"homepage": "https://github.com/snyk/snyk-nuget-plugin#readme",
2727
"dependencies": {
28+
"debug": "^3.1.0",
2829
"es6-promise": "^4.1.1",
2930
"xml2js": "^0.4.17",
3031
"zip": "^1.2.0"

test/stubs/dummy_project_1/dummy_project_1/WebApplication1.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646
<WarningLevel>4</WarningLevel>
4747
</PropertyGroup>
4848
<ItemGroup>
49+
<Reference Include="Invalid.Package">
50+
<Private>True</Private>
51+
<HintPath>..\someInvalidFolder\Invalid.Package\Package.dll</HintPath>
52+
</Reference>
4953
<Reference Include="Antlr3.Runtime">
5054
<Private>True</Private>
5155
<HintPath>..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll</HintPath>

0 commit comments

Comments
 (0)