Skip to content

Commit 09f02e7

Browse files
brianquinlanCommit Queue
authored and
Commit Queue
committed
[stable] Do not throw during InternetAddress.tryParse
Bug:#52423 Change-Id: I8f3d63ddc0f2d0f768a7fa5219c883761bd9fa61 Tested: covered by existing tests Cherry-pick: https://dart-review.googlesource.com/c/sdk/+/304827 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/305041 Commit-Queue: Brian Quinlan <[email protected]> Reviewed-by: Alexander Aprelev <[email protected]>
1 parent b28ac57 commit 09f02e7

File tree

1 file changed

+26
-13
lines changed

1 file changed

+26
-13
lines changed

sdk/lib/_internal/vm/bin/socket_patch.dart

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ class _InternetAddress implements InternetAddress {
213213
_InternetAddress(this.type, this.address, this._host, this._in_addr,
214214
[this._scope_id = 0]);
215215

216-
factory _InternetAddress.fromString(String address,
216+
static Object _parseAddressString(String address,
217217
{InternetAddressType? type}) {
218218
// TODO(40614): Remove once non-nullability is sound.
219219
ArgumentError.checkNotNull(address, 'address');
@@ -231,14 +231,14 @@ class _InternetAddress implements InternetAddress {
231231
}
232232
var inAddr = _parse(address);
233233
if (inAddr == null) {
234-
throw ArgumentError('Invalid internet address $address');
234+
return ArgumentError('Invalid internet address $address');
235235
}
236236
InternetAddressType type = inAddr.length == _IPv4AddrLength
237237
? InternetAddressType.IPv4
238238
: InternetAddressType.IPv6;
239239
if (scopeID != null && scopeID.length > 0) {
240240
if (type != InternetAddressType.IPv6) {
241-
throw ArgumentError.value(
241+
return ArgumentError.value(
242242
address, 'address', 'IPv4 addresses cannot have a scope ID');
243243
}
244244

@@ -248,14 +248,36 @@ class _InternetAddress implements InternetAddress {
248248
return _InternetAddress(
249249
InternetAddressType.IPv6, originalAddress, null, inAddr, scopeID);
250250
} else {
251-
throw ArgumentError.value(
251+
return ArgumentError.value(
252252
address, 'address', 'Invalid IPv6 address with scope ID');
253253
}
254254
}
255255
return _InternetAddress(type, originalAddress, null, inAddr, 0);
256256
}
257257
}
258258

259+
factory _InternetAddress.fromString(String address,
260+
{InternetAddressType? type}) {
261+
final parsedAddress = _parseAddressString(address, type: type);
262+
if (parsedAddress is _InternetAddress) {
263+
return parsedAddress;
264+
} else {
265+
assert(parsedAddress is ArgumentError);
266+
throw parsedAddress;
267+
}
268+
}
269+
270+
static _InternetAddress? tryParse(String address) {
271+
checkNotNullable(address, "address");
272+
final parsedAddress = _parseAddressString(address);
273+
if (parsedAddress is _InternetAddress) {
274+
return parsedAddress;
275+
} else {
276+
assert(parsedAddress is ArgumentError);
277+
return null;
278+
}
279+
}
280+
259281
factory _InternetAddress.fromRawAddress(Uint8List rawAddress,
260282
{InternetAddressType? type}) {
261283
if (type == InternetAddressType.unix) {
@@ -279,15 +301,6 @@ class _InternetAddress implements InternetAddress {
279301
}
280302
}
281303

282-
static _InternetAddress? tryParse(String address) {
283-
checkNotNullable(address, "address");
284-
try {
285-
return _InternetAddress.fromString(address);
286-
} on ArgumentError catch (_) {
287-
return null;
288-
}
289-
}
290-
291304
factory _InternetAddress.fixed(int id) {
292305
switch (id) {
293306
case _addressLoopbackIPv4:

0 commit comments

Comments
 (0)