Skip to content

Commit 6987d13

Browse files
committed
fix(util): guard _datetime_from_weaviate_str against empty string input
Empty string is the protobuf wire-format default for an unset string field. Calling string[-1] on "" raises IndexError, crashing gRPC deserialization for any object with an unset date property. Return datetime.min for empty input, matching the existing behaviour for year-zero dates. Fixes #2052
1 parent 22a12e4 commit 6987d13

2 files changed

Lines changed: 4 additions & 0 deletions

File tree

test/test_util.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,8 @@ def test_is_weaviate_too_old(version: str, too_old: bool):
458458
),
459459
# Test handling year 0 (should return datetime.min)
460460
("0000-01-15T14:30:45.123456Z", datetime.min),
461+
# Test empty string (protobuf default for unset string field)
462+
("", datetime.min),
461463
],
462464
)
463465
def test_datetime_from_weaviate_str(input_str: str, expected: datetime) -> None:

weaviate/util.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,8 @@ def _datetime_to_string(value: TIME) -> str:
751751

752752

753753
def _datetime_from_weaviate_str(string: str) -> datetime.datetime:
754+
if not string:
755+
return datetime.datetime.min
754756
if string[-1] != "Z":
755757
string = "".join(string.rsplit(":", 1))
756758

0 commit comments

Comments
 (0)