2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-30 20:46:47 +00:00

Parameter value bug (#7601) (#7602)

* Handle out-of range numerical values

* Add unit test

(cherry picked from commit 84d076848a901a1f40e636c6c593ca0004f1883e)

Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
This commit is contained in:
github-actions[bot] 2024-07-09 21:49:15 +10:00 committed by GitHub
parent 50fdefa473
commit 2329179070
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 0 deletions

View File

@ -5,6 +5,7 @@ from __future__ import annotations
import decimal import decimal
import hashlib import hashlib
import logging import logging
import math
import os import os
import re import re
from datetime import datetime, timedelta from datetime import datetime, timedelta
@ -3757,6 +3758,12 @@ class PartParameter(InvenTree.models.InvenTreeMetadataModel):
except ValueError: except ValueError:
self.data_numeric = None self.data_numeric = None
if self.data_numeric is not None and type(self.data_numeric) is float:
# Prevent out of range numbers, etc
# Ref: https://github.com/inventree/InvenTree/issues/7593
if math.isnan(self.data_numeric) or math.isinf(self.data_numeric):
self.data_numeric = None
part = models.ForeignKey( part = models.ForeignKey(
Part, Part,
on_delete=models.CASCADE, on_delete=models.CASCADE,

View File

@ -47,6 +47,25 @@ class TestParams(TestCase):
t3.full_clean() t3.full_clean()
t3.save() # pragma: no cover t3.save() # pragma: no cover
def test_invalid_numbers(self):
"""Test that invalid floating point numbers are correctly handled."""
p = Part.objects.first()
t = PartParameterTemplate.objects.create(name='Yaks')
valid_floats = ['-12', '1.234', '17', '3e45', '-12e34']
for value in valid_floats:
param = PartParameter(part=p, template=t, data=value)
param.full_clean()
self.assertIsNotNone(param.data_numeric)
invalid_floats = ['88E6352', 'inf', '-inf', 'nan', '3.14.15', '3eee3']
for value in invalid_floats:
param = PartParameter(part=p, template=t, data=value)
param.full_clean()
self.assertIsNone(param.data_numeric)
def test_metadata(self): def test_metadata(self):
"""Unit tests for the metadata field.""" """Unit tests for the metadata field."""
for model in [PartParameterTemplate]: for model in [PartParameterTemplate]: