Skip to content

Commit

Permalink
Fix parsing of IPv6 addresses with zoneid (e.g %host0)
Browse files Browse the repository at this point in the history
Signed-off-by: Martin Böh <contact@martb.dev>
  • Loading branch information
MartB committed Oct 31, 2024
1 parent 8a13f28 commit 08002ae
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 4 deletions.
2 changes: 1 addition & 1 deletion lib/private/Net/IpAddressClassifier.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class IpAddressClassifier {
public function isLocalAddress(string $ip): bool {
$parsedIp = Factory::parseAddressString(
$ip,
ParseStringFlag::IPV4_MAYBE_NON_DECIMAL | ParseStringFlag::IPV4ADDRESS_MAYBE_NON_QUAD_DOTTED
ParseStringFlag::IPV4_MAYBE_NON_DECIMAL | ParseStringFlag::IPV4ADDRESS_MAYBE_NON_QUAD_DOTTED | ParseStringFlag::MAY_INCLUDE_ZONEID
);
if ($parsedIp === null) {
/* Not an IP */
Expand Down
5 changes: 3 additions & 2 deletions lib/private/Security/Ip/Address.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use InvalidArgumentException;
use IPLib\Address\AddressInterface;
use IPLib\Factory;
use IPLib\ParseStringFlag;
use OCP\Security\Ip\IAddress;
use OCP\Security\Ip\IRange;

Expand All @@ -21,15 +22,15 @@ class Address implements IAddress {
private readonly AddressInterface $ip;

public function __construct(string $ip) {
$ip = Factory::parseAddressString($ip);
$ip = Factory::parseAddressString($ip, ParseStringFlag::MAY_INCLUDE_ZONEID);
if ($ip === null) {
throw new InvalidArgumentException('Given IP address can’t be parsed');
}
$this->ip = $ip;
}

public static function isValid(string $ip): bool {
return Factory::parseAddressString($ip) !== null;
return Factory::parseAddressString($ip, ParseStringFlag::MAY_INCLUDE_ZONEID) !== null;
}

public function matches(IRange ... $ranges): bool {
Expand Down
3 changes: 2 additions & 1 deletion lib/private/Security/Ip/Range.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

use InvalidArgumentException;
use IPLib\Factory;
use IPLib\ParseStringFlag;
use IPLib\Range\RangeInterface;
use OCP\Security\Ip\IAddress;
use OCP\Security\Ip\IRange;
Expand All @@ -30,7 +31,7 @@ public static function isValid(string $range): bool {
}

public function contains(IAddress $address): bool {
return $this->range->contains(Factory::parseAddressString((string)$address));
return $this->range->contains(Factory::parseAddressString((string)$address), ParseStringFlag::MAY_INCLUDE_ZONEID);

Check failure on line 34 in lib/private/Security/Ip/Range.php

View workflow job for this annotation

GitHub Actions / static-code-analysis

TooManyArguments

lib/private/Security/Ip/Range.php:34:24: TooManyArguments: Too many arguments for method IPLib\Range\RangeInterface::contains - saw 2 (see https://psalm.dev/026)
}

public function __toString(): string {
Expand Down

0 comments on commit 08002ae

Please sign in to comment.