summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erikj@element.io>2025-02-10 16:27:46 +0100
committerGitHub <noreply@github.com>2025-02-10 15:27:46 +0000
commit4c84c9c4ad0d3a1e30b5384604e49f8569c0e015 (patch)
treee73aa9a3b3e7902086e09e792679e6013f39fd6d
parentAdd Oracle Linux installation instructions (#17436) (diff)
downloadsynapse-4c84c9c4ad0d3a1e30b5384604e49f8569c0e015.tar.xz
Don't log exceptions for obviously incorrect stream tokens (#18139)
We log incorrect ones as we want to catch bugs where Synapse returns bad
tokens. However, sometimes clients just send tokens that are e.g. empty.

---------

Co-authored-by: Eric Eastwood <erice@element.io>
-rw-r--r--changelog.d/18139.misc1
-rw-r--r--synapse/types/__init__.py5
2 files changed, 6 insertions, 0 deletions
diff --git a/changelog.d/18139.misc b/changelog.d/18139.misc
new file mode 100644

index 0000000000..f753033b8e --- /dev/null +++ b/changelog.d/18139.misc
@@ -0,0 +1 @@ +Do not log at the exception-level when clients provide empty `since` token to `/sync` API. diff --git a/synapse/types/__init__.py b/synapse/types/__init__.py
index 26783c5622..3d15c04faa 100644 --- a/synapse/types/__init__.py +++ b/synapse/types/__init__.py
@@ -664,6 +664,11 @@ class RoomStreamToken(AbstractMultiWriterStreamToken): @classmethod async def parse(cls, store: "PurgeEventsStore", string: str) -> "RoomStreamToken": + # Check that it looks like a Synapse token first. We do this so that + # we don't log at the exception-level for obviously incorrect tokens. + if not string or string[0] not in ("s", "t", "m"): + raise SynapseError(400, f"Invalid room stream token {string:!r}") + try: if string[0] == "s": return cls(topological=None, stream=int(string[1:]))