1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-28 11:44:57 +03:00

oauth_validator: Shorten JSON responses in test logs

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 <alvherre@kurilemu.de>
Discussion: https://postgr.es/m/202511251218.zfs4nu2qnh2m%40alvherre.pgsql
Backpatch-through: 18
This commit is contained in:
Jacob Champion
2025-11-25 20:32:52 -08:00
parent e3e787ca02
commit 47c7a7ebc8

View File

@@ -257,13 +257,33 @@ class OAuthHandler(http.server.BaseHTTPRequestHandler):
return token 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: def _send_json(self, js: JsonObject) -> None:
""" """
Sends the provided JSON dict as an application/json response. Sends the provided JSON dict as an application/json response.
self._response_code can be modified to send JSON error responses. self._response_code can be modified to send JSON error responses.
""" """
resp = json.dumps(js).encode("ascii") 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_response(self._response_code)
self.send_header("Content-Type", self._content_type) self.send_header("Content-Type", self._content_type)