diff --git a/changelog.d/12098.bugfix b/changelog.d/12098.bugfix
new file mode 100644
index 0000000000..6b696692e3
--- /dev/null
+++ b/changelog.d/12098.bugfix
@@ -0,0 +1 @@
+Fix a bug introduced in Synapse 1.51.0rc1 where incoming federation transactions containing at least one EDU would be dropped if debug logging was enabled for `synapse.8631_debug`.
\ No newline at end of file
diff --git a/synapse/federation/transport/server/federation.py b/synapse/federation/transport/server/federation.py
index 9cc9a7339d..23ce343057 100644
--- a/synapse/federation/transport/server/federation.py
+++ b/synapse/federation/transport/server/federation.py
@@ -110,7 +110,7 @@ class FederationSendServlet(BaseFederationServerServlet):
if issue_8631_logger.isEnabledFor(logging.DEBUG):
DEVICE_UPDATE_EDUS = ["m.device_list_update", "m.signing_key_update"]
device_list_updates = [
- edu.content
+ edu.get("content", {})
for edu in transaction_data.get("edus", [])
if edu.get("edu_type") in DEVICE_UPDATE_EDUS
]
diff --git a/tests/federation/transport/test_server.py b/tests/federation/transport/test_server.py
index ce49d094d7..5f001c33b0 100644
--- a/tests/federation/transport/test_server.py
+++ b/tests/federation/transport/test_server.py
@@ -13,7 +13,7 @@
# limitations under the License.
from tests import unittest
-from tests.unittest import override_config
+from tests.unittest import DEBUG, override_config
class RoomDirectoryFederationTests(unittest.FederatingHomeserverTestCase):
@@ -38,3 +38,21 @@ class RoomDirectoryFederationTests(unittest.FederatingHomeserverTestCase):
"/_matrix/federation/v1/publicRooms",
)
self.assertEqual(200, channel.code)
+
+ @DEBUG
+ def test_edu_debugging_doesnt_explode(self):
+ """Sanity check incoming federation succeeds with `synapse.debug_8631` enabled.
+
+ Remove this when we strip out issue_8631_logger.
+ """
+ channel = self.make_signed_federation_request(
+ "PUT",
+ "/_matrix/federation/v1/send/txn_id_1234/",
+ content={
+ "edus": [
+ {"edu_type": "m.device_list_update", "content": {"foo": "bar"}}
+ ],
+ "pdus": [],
+ },
+ )
+ self.assertEqual(200, channel.code)
|