parseIpv4 function
Parses IPv4 "a.b.c.d" into int (big-endian). Returns null if invalid. Audited: 2026-06-13
Implementation
int? parseIpv4(String s) {
// A valid dotted-quad has exactly four octets; anything else is malformed.
final List<String> parts = s.split('.');
if (parts.length != _ipv4OctetCount) return null;
int address = 0;
// Pack the octets big-endian: each octet shifts the accumulator left 8 bits
// before OR-ing the next in, so "1.2.3.4" becomes 0x01020304. Require a
// canonical decimal octet (no sign/whitespace/leading zero) and 0..255.
for (final String p in parts) {
if (!_ipv4OctetPattern.hasMatch(p)) return null;
final int? n = int.tryParse(p);
if (n == null || n < _ipv4OctetMin || n > _ipv4OctetMax) return null;
address = (address << _bitsPerOctet) | n;
}
return address;
}