From 47c7a7ebc89eb6b8cf81c937885864f994784d38 Mon Sep 17 00:00:00 2001 From: Jacob Champion Date: Tue, 25 Nov 2025 20:32:52 -0800 Subject: [PATCH] oauth_validator: Shorten JSON responses in test logs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Response padding from the oauth_validator abuse tests was adding a couple megabytes to the test logs. We don't need the buildfarm to hold onto that, and we don't need to read it when debugging; truncate it. Reported-by: Álvaro Herrera Discussion: https://postgr.es/m/202511251218.zfs4nu2qnh2m%40alvherre.pgsql Backpatch-through: 18 --- .../modules/oauth_validator/t/oauth_server.py | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/test/modules/oauth_validator/t/oauth_server.py b/src/test/modules/oauth_validator/t/oauth_server.py index 0f8836aadf3..c70783ecbe4 100755 --- a/src/test/modules/oauth_validator/t/oauth_server.py +++ b/src/test/modules/oauth_validator/t/oauth_server.py @@ -257,13 +257,33 @@ class OAuthHandler(http.server.BaseHTTPRequestHandler): return token + def _log_response(self, js: JsonObject) -> None: + """ + Trims the response JSON, if necessary, and logs it for later debugging. + """ + # At the moment the biggest problem for tests is the _pad_ member, which + # is a megabyte in size, so truncate that to something more reasonable. + if "_pad_" in js: + pad = js["_pad_"] + + # Don't modify the original dict. + js = dict(js) + js["_pad_"] = pad[:64] + f"[...truncated from {len(pad)} bytes]" + + resp = json.dumps(js).encode("ascii") + self.log_message("sending JSON response: %s", resp) + + # If you've tripped this assertion, please truncate the new addition as + # above, or else come up with a new strategy. + assert len(resp) < 1024, "_log_response must be adjusted for new JSON" + def _send_json(self, js: JsonObject) -> None: """ Sends the provided JSON dict as an application/json response. self._response_code can be modified to send JSON error responses. """ resp = json.dumps(js).encode("ascii") - self.log_message("sending JSON response: %s", resp) + self._log_response(js) self.send_response(self._response_code) self.send_header("Content-Type", self._content_type)