Skip to content

Commit 14cb98e

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

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
@@ -209,7 +209,7 @@ class _InternetAddress implements InternetAddress {
209209
_InternetAddress(this.type, this.address, this._host, this._in_addr,
210210
[this._scope_id = 0]);
211211

212-
factory _InternetAddress.fromString(String address,
212+
static Object _parseAddressString(String address,
213213
{InternetAddressType? type}) {
214214
if (type == InternetAddressType.unix) {
215215
var rawAddress = FileSystemEntity._toUtf8Array(address);
@@ -225,14 +225,14 @@ class _InternetAddress implements InternetAddress {
225225
}
226226
var inAddr = _parse(address);
227227
if (inAddr == null) {
228-
throw ArgumentError('Invalid internet address $address');
228+
return ArgumentError('Invalid internet address $address');
229229
}
230230
InternetAddressType type = inAddr.length == _IPv4AddrLength
231231
? InternetAddressType.IPv4
232232
: InternetAddressType.IPv6;
233233
if (scopeID != null && scopeID.length > 0) {
234234
if (type != InternetAddressType.IPv6) {
235-
throw ArgumentError.value(
235+
return ArgumentError.value(
236236
address, 'address', 'IPv4 addresses cannot have a scope ID');
237237
}
238238

@@ -242,14 +242,36 @@ class _InternetAddress implements InternetAddress {
242242
return _InternetAddress(
243243
InternetAddressType.IPv6, originalAddress, null, inAddr, scopeID);
244244
} else {
245-
throw ArgumentError.value(
245+
return ArgumentError.value(
246246
address, 'address', 'Invalid IPv6 address with scope ID');
247247
}
248248
}
249249
return _InternetAddress(type, originalAddress, null, inAddr, 0);
250250
}
251251
}
252252

253+
factory _InternetAddress.fromString(String address,
254+
{InternetAddressType? type}) {
255+
final parsedAddress = _parseAddressString(address, type: type);
256+
if (parsedAddress is _InternetAddress) {
257+
return parsedAddress;
258+
} else {
259+
assert(parsedAddress is ArgumentError);
260+
throw parsedAddress;
261+
}
262+
}
263+
264+
static _InternetAddress? tryParse(String address) {
265+
checkNotNullable(address, "address");
266+
final parsedAddress = _parseAddressString(address);
267+
if (parsedAddress is _InternetAddress) {
268+
return parsedAddress;
269+
} else {
270+
assert(parsedAddress is ArgumentError);
271+
return null;
272+
}
273+
}
274+
253275
factory _InternetAddress.fromRawAddress(Uint8List rawAddress,
254276
{InternetAddressType? type}) {
255277
if (type == InternetAddressType.unix) {
@@ -273,15 +295,6 @@ class _InternetAddress implements InternetAddress {
273295
}
274296
}
275297

276-
static _InternetAddress? tryParse(String address) {
277-
checkNotNullable(address, "address");
278-
try {
279-
return _InternetAddress.fromString(address);
280-
} on ArgumentError catch (_) {
281-
return null;
282-
}
283-
}
284-
285298
factory _InternetAddress.fixed(int id) {
286299
switch (id) {
287300
case _addressLoopbackIPv4:

0 commit comments

Comments
 (0)