Skip to content

Commit 382e1d0

Browse files
committed
Fix: float number support
1 parent 4167e05 commit 382e1d0

File tree

5 files changed

+23
-8
lines changed

5 files changed

+23
-8
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "pySigma"
3-
version = "0.4.0"
3+
version = "0.4.1"
44
license = "LGPL-2.1-only"
55
description = "Sigma rule processing and conversion tools"
66
authors = ["Thomas Patzke <[email protected]>"]

sigma/rule.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ def from_mapping(
154154
cls,
155155
key : Optional[str],
156156
val : Union[
157-
List[Union[int, str]],
158-
Union[int, str],
157+
List[Union[int, float, str]],
158+
Union[int, float, str],
159159
None,
160160
],
161161
source : Optional[SigmaRuleLocation] = None,
@@ -184,7 +184,7 @@ def from_mapping(
184184
except KeyError as e:
185185
raise sigma_exceptions.SigmaModifierError(f"Unknown modifier {str(e)}", source=source)
186186

187-
if isinstance(val, (int, str)): # value is plain, convert into single element list
187+
if isinstance(val, (int, float, str)): # value is plain, convert into single element list
188188
val = [val]
189189
elif val is None:
190190
val = [None]

sigma/types.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,13 @@ class SigmaNumber(SigmaType):
310310
number : Union[int, float]
311311

312312
def __post_init__(self):
313-
try:
314-
self.number = int(self.number)
313+
try: # Only use float number if it can't be represented as int.
314+
i = int(self.number)
315+
f = float(self.number)
316+
if i == f:
317+
self.number = i
318+
else:
319+
self.number = f
315320
except ValueError as e:
316321
raise SigmaValueError("Invalid number") from e
317322

tests/test_rule.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,14 @@ def test_sigmadetectionitem_key_value_single_string_modifier_to_plain():
150150
detection_item.apply_modifiers()
151151
assert detection_item.to_plain() == { "key|contains": "value" }
152152

153-
def test_sigmadetectionitem_key_value_single_number():
154-
"""Key-value detection with one value."""
153+
def test_sigmadetectionitem_key_value_single_int():
154+
"""Key-value detection with one integer value."""
155155
assert SigmaDetectionItem.from_mapping("key", 123) == SigmaDetectionItem("key", [], [SigmaNumber(123)])
156156

157+
def test_sigmadetectionitem_key_value_single_float():
158+
"""Key-value detection with one integer value."""
159+
assert SigmaDetectionItem.from_mapping("key", 12.34) == SigmaDetectionItem("key", [], [SigmaNumber(12.34)])
160+
157161
def test_sigmadetectionitem_key_value_none():
158162
"""Key-value detection with none value."""
159163
assert SigmaDetectionItem.from_mapping("key", None) == SigmaDetectionItem("key", [], [SigmaNull()])

tests/test_types.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,12 @@ def test_strings_convert_no_singlewildcard():
162162
with pytest.raises(SigmaValueError, match="Single-character wildcard"):
163163
SigmaString("foo?bar").convert(wildcard_single=None)
164164

165+
def test_number_int():
166+
assert SigmaNumber(123).number == 123
167+
168+
def test_number_float():
169+
assert SigmaNumber(12.34).number == 12.34
170+
165171
def test_number_to_plain():
166172
assert SigmaNumber(123).to_plain() == 123
167173

0 commit comments

Comments
 (0)