diff --git a/changes/bug31939 b/changes/bug31939
new file mode 100644
index 0000000000000000000000000000000000000000..a36ea495d6facd3c239e249c0aaa6577b6528609
--- /dev/null
+++ b/changes/bug31939
@@ -0,0 +1,3 @@
+  o Minor bugfixes (tls, logging):
+    - Log TLS read buffer length bugs once, rather than filling the logs
+      with similar warnings. Fixes bug 31939; bugfix on 0.3.0.4-rc.
diff --git a/src/lib/tls/buffers_tls.c b/src/lib/tls/buffers_tls.c
index c176162c3523bb5d5c566b0f5d5d45d4855e25a2..e92cb9163fa0f86ea5f3b54aa1c3f39725bdd717 100644
--- a/src/lib/tls/buffers_tls.c
+++ b/src/lib/tls/buffers_tls.c
@@ -68,9 +68,9 @@ buf_read_from_tls(buf_t *buf, tor_tls_t *tls, size_t at_most)
 
   check_no_tls_errors();
 
-  if (BUG(buf->datalen >= INT_MAX))
+  IF_BUG_ONCE(buf->datalen >= INT_MAX)
     return -1;
-  if (BUG(buf->datalen >= INT_MAX - at_most))
+  IF_BUG_ONCE(buf->datalen >= INT_MAX - at_most)
     return -1;
 
   while (at_most > total_read) {