Skip to content

Commit 1e781fc

Browse files
authored
Fallback Uri parsing to unknown if its invalid (#1414)
1 parent c4f1621 commit 1e781fc

File tree

5 files changed

+31
-2
lines changed

5 files changed

+31
-2
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## Unreleased
4+
5+
### Fixes
6+
7+
- Fallback Uri parsing to `unknown` if its invalid ([#1414](https://github.com/getsentry/sentry-dart/pull/1414))
8+
39
## 7.5.0
410

511
### Features

dart/lib/src/utils/url_details.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ class UrlDetails {
1010
final String? query;
1111
final String? fragment;
1212

13-
late final urlOrFallback = url ?? 'unknown';
13+
static const _unknown = 'unknown';
14+
15+
late final urlOrFallback =
16+
Uri.tryParse(url ?? _unknown)?.toString() ?? _unknown;
1417

1518
void applyToSpan(ISentrySpan? span) {
1619
if (span == null) {

dart/test/utils/url_details_test.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ void main() {
7575
final urlDetails = UrlDetails(url: null);
7676
expect(urlDetails.urlOrFallback, "unknown");
7777
});
78+
79+
test('returns fallback for invalid Uri', () {
80+
final urlDetails = UrlDetails(url: 'htttps://[Filtered].com/foobar.txt');
81+
82+
expect(urlDetails.urlOrFallback, "unknown");
83+
expect(Uri.parse(urlDetails.urlOrFallback), isNotNull);
84+
});
7885
}
7986

8087
class MockSpan extends Mock implements SentrySpan {}

flutter/lib/src/flutter_sentry_attachment.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ class FlutterSentryAttachment extends SentryAttachment {
2323
final data = await (bundle ?? rootBundle).load(key);
2424
return data.buffer.asUint8List();
2525
},
26-
filename: filename ?? Uri.parse(key).pathSegments.last,
26+
filename: filename ??
27+
((Uri.tryParse(key)?.pathSegments.isNotEmpty == true)
28+
? Uri.parse(key).pathSegments.last
29+
: 'unknown'),
2730
attachmentType: type,
2831
contentType: contentType,
2932
addToTransactions: addToTransactions,

flutter/test/flutter_sentry_attachment_test.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@ void main() {
2121
expect(attachment.addToTransactions, true);
2222
await expectLater(await attachment.bytes, [102, 111, 111, 32, 98, 97, 114]);
2323
});
24+
25+
test('invalid Uri fall back to unknown', () async {
26+
final attachment = FlutterSentryAttachment.fromAsset(
27+
'htttps://[Filtered].com/foobar.txt',
28+
bundle: TestAssetBundle(),
29+
addToTransactions: true,
30+
);
31+
32+
expect(attachment.filename, 'unknown');
33+
});
2434
}
2535

2636
class TestAssetBundle extends CachingAssetBundle {

0 commit comments

Comments
 (0)