From 9fecdc4b9ea1615a9ed09246f82826f366888cef Mon Sep 17 00:00:00 2001 From: Lene Preuss Date: Sat, 13 Jan 2024 00:18:49 +0100 Subject: [PATCH] hash_size must be power of 2 for whash algorithm --- duplicate_images/parse_commandline.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/duplicate_images/parse_commandline.py b/duplicate_images/parse_commandline.py index 795af7b..9af9b02 100644 --- a/duplicate_images/parse_commandline.py +++ b/duplicate_images/parse_commandline.py @@ -8,6 +8,11 @@ from duplicate_images.methods import ACTIONS_ON_EQUALITY, IMAGE_HASH_ALGORITHM +def is_power_of_2(n: int) -> bool: + # https://stackoverflow.com/questions/57025836/how-to-check-if-a-given-number-is-a-power-of-two + return (n != 0) and (n & (n - 1) == 0) + + def parse_command_line(args: Optional[List[str]] = None) -> Namespace: parser = ArgumentParser(description='Find pairs of equal or similar images.') @@ -71,4 +76,6 @@ def parse_command_line(args: Optional[List[str]] = None) -> Namespace: namespace = parser.parse_args(args) if namespace.on_equal == 'exec' and not namespace.exec: parser.error('--exec argument is required') + if namespace.algorithm == 'whash' and not is_power_of_2(namespace.hash_size): + parser.error('whash requires hash_size to be a power of 2') return namespace