Quiet warning instead of stack trace when failing to parse advisories (#4817)
diff --git a/lib/src/source/hosted.dart b/lib/src/source/hosted.dart
index 09dc7ff..4696a86 100644
--- a/lib/src/source/hosted.dart
+++ b/lib/src/source/hosted.dart
@@ -601,11 +601,10 @@
}
body = decoded;
result = _extractAdvisoryDetailsForPackage(decoded, ref.name);
- } on FormatException catch (error, stackTrace) {
+ } on FormatException catch (error) {
log.warning(
- 'Failed to decode advisories for $packageName from $hostedUrl.\n'
- '$error\n'
- '${Chain.forTrace(stackTrace)}',
+ 'Failed to decode advisories for $packageName from $hostedUrl: '
+ '${getErrorMessage(error)}',
);
return null;
} on PubHttpResponseException catch (error, stackTrace) {
diff --git a/test/get/hosted/advisory_test.dart b/test/get/hosted/advisory_test.dart
index e184c90..08288b5 100644
--- a/test/get/hosted/advisory_test.dart
+++ b/test/get/hosted/advisory_test.dart
@@ -434,6 +434,32 @@
await ctx.run(['get']);
});
+ testWithGolden('malformed advisories response', (ctx) async {
+ final server = await servePackages();
+ server.serve('foo', '1.2.3');
+
+ await d.dir(appPath, [
+ d.pubspec({
+ 'name': 'app',
+ 'dependencies': {'foo': '^1.0.0'},
+ }),
+ ]).create();
+
+ server.addAdvisory(
+ advisoryId: '123',
+ affectedPackages: [
+ AffectedPackage(name: 'foo', versions: ['1.2.3']),
+ ],
+ );
+
+ server.handle(
+ '/api/packages/foo/advisories',
+ (request) => Response.ok('{"advisories": "not a list"}'),
+ );
+
+ await ctx.run(['get']);
+ });
+
test('do not fetch advisories when.`--offline`', () async {
final server = await servePackages();
server.serve('foo', '1.2.3');
diff --git a/test/testdata/goldens/get/hosted/advisory_test/malformed advisories response.txt b/test/testdata/goldens/get/hosted/advisory_test/malformed advisories response.txt
new file mode 100644
index 0000000..e89b08d
--- /dev/null
+++ b/test/testdata/goldens/get/hosted/advisory_test/malformed advisories response.txt
@@ -0,0 +1,10 @@
+# GENERATED BY: test/get/hosted/advisory_test.dart
+
+## Section 0
+$ pub get
+Resolving dependencies...
+Downloading packages...
++ foo 1.2.3
+Changed 1 dependency!
+[STDERR] Failed to decode advisories for foo from http://localhost:$PORT: advisories must be a list
+