From 329649b9add1054f89d220d3a8388f626a968a11 Mon Sep 17 00:00:00 2001 From: GZTime Date: Thu, 9 Jan 2025 03:26:48 +0800 Subject: [PATCH] fix: check wildcard --- src/utils/pattern.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/utils/pattern.rs b/src/utils/pattern.rs index fe6cc31..5eb620e 100644 --- a/src/utils/pattern.rs +++ b/src/utils/pattern.rs @@ -1,4 +1,4 @@ -use std::str::FromStr; +use std::{collections::HashMap, str::FromStr}; use anyhow::bail; @@ -17,15 +17,24 @@ impl HashPattern { let hash_str = hex::encode_upper(hash); - let mut matched = true; for (i, c) in self.pattern.chars().enumerate() { if c.is_ascii_hexdigit() && c != hash_str.chars().nth(i).unwrap() { - matched = false; - break; + return false; } } - matched + let mut map = HashMap::new(); + for (pos, c) in self.pattern.chars().enumerate() { + if ('G'..='Z').contains(&c) { + let hash_char = hash_str.chars().nth(pos).unwrap(); + let expect = map.entry(c).or_insert(hash_char); + if *expect != hash_char { + return false; + } + } + } + + true } }