Your message dated Mon, 13 Mar 2023 08:31:54 +0200
with message-id
<cam8zjquhjufq_k6cdv2dpttqumfodsbcxsd2+m2fykm0mo0...@mail.gmail.com>
and subject line Re: Bug#1032514: unblock: quakespasm/0.95.1+dfsg-2
has caused the Debian Bug report #1032514,
regarding unblock: quakespasm/0.95.1+dfsg-2
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)
--
1032514: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1032514
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: [email protected]
Usertags: unblock
X-Debbugs-Cc: [email protected]
Control: affects -1 + src:quakespasm
Please unblock package quakespasm
[ Reason ]
Fix #1032276
[ Impact ]
If not fixed, when the quake-server package is installed and quakespasm is
the selected alternative for quake-engine-server, the quake-server systemd
service spams the system log with rapid "Console input too long" messages.
[ Tests ]
Manual test: can configure /etc/alternatives/quake-engine-server =
/usr/games/quakespasm, systemctl restart quake-server.service, and connect
a client with `quake --engine=quakespasm '+connect 127.0.0.1'`. With the
version in bookworm, "Console input too long" messages appear until the
server is stopped. With the proposed version, those messages do not appear.
[ Risks ]
Low risk: almost a leaf package (one of multiple options for contrib
packages quake and quake-server), the patch is simple, and its small user
base is indicated by the fact that it has taken this long for anyone to
notice that the bug existed.
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
unblock quakespasm/0.95.1+dfsg-2
diffstat for quakespasm-0.95.1+dfsg quakespasm-0.95.1+dfsg
Quake/sys_sdl_unix.c | 14 ++
debian/.gitignore | 5
debian/changelog | 9 +
debian/control | 2
debian/patches/series | 1
debian/patches/sys_sdl_unix-Stop-reading-from-stdin-when-EOF-is-reached.patch | 58 ++++++++++
6 files changed, 87 insertions(+), 2 deletions(-)
diff -Nru quakespasm-0.95.1+dfsg/debian/changelog quakespasm-0.95.1+dfsg/debian/changelog
--- quakespasm-0.95.1+dfsg/debian/changelog 2022-11-08 07:57:52.000000000 +0000
+++ quakespasm-0.95.1+dfsg/debian/changelog 2023-03-07 11:56:29.000000000 +0000
@@ -1,3 +1,12 @@
+quakespasm (0.95.1+dfsg-2) unstable; urgency=medium
+
+ * Add patch to fix running the server with /dev/null as stdin.
+ In particular, this makes it suitable for the systemd service in the
+ quake package. (Closes: #1032276)
+ * Standards-Version: 4.6.2 (no changes required)
+
+ -- Simon McVittie <[email protected]> Tue, 07 Mar 2023 11:56:29 +0000
+
quakespasm (0.95.1+dfsg-1) unstable; urgency=medium
* New upstream release.
diff -Nru quakespasm-0.95.1+dfsg/debian/control quakespasm-0.95.1+dfsg/debian/control
--- quakespasm-0.95.1+dfsg/debian/control 2022-09-16 10:48:48.000000000 +0100
+++ quakespasm-0.95.1+dfsg/debian/control 2023-03-07 11:56:29.000000000 +0000
@@ -13,7 +13,7 @@
libsdl2-dev,
libvorbis-dev
Rules-Requires-Root: no
-Standards-Version: 4.6.1
+Standards-Version: 4.6.2
Vcs-Browser: https://salsa.debian.org/games-team/quakespasm
Vcs-Git: https://salsa.debian.org/games-team/quakespasm.git
Homepage: http://quakespasm.sourceforge.net/
diff -Nru quakespasm-0.95.1+dfsg/debian/.gitignore quakespasm-0.95.1+dfsg/debian/.gitignore
--- quakespasm-0.95.1+dfsg/debian/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ quakespasm-0.95.1+dfsg/debian/.gitignore 2023-03-07 11:56:29.000000000 +0000
@@ -0,0 +1,5 @@
+/*.debhelper.log
+/*.substvars
+/files
+/quakespasm/
+/quakespasm-dbg/
diff -Nru quakespasm-0.95.1+dfsg/debian/patches/series quakespasm-0.95.1+dfsg/debian/patches/series
--- quakespasm-0.95.1+dfsg/debian/patches/series 2022-09-16 10:48:48.000000000 +0100
+++ quakespasm-0.95.1+dfsg/debian/patches/series 2023-03-07 11:56:29.000000000 +0000
@@ -4,3 +4,4 @@
mkpak-bashism.patch
reproducible-build.patch
rotfish-double-count.patch
+sys_sdl_unix-Stop-reading-from-stdin-when-EOF-is-reached.patch
diff -Nru quakespasm-0.95.1+dfsg/debian/patches/sys_sdl_unix-Stop-reading-from-stdin-when-EOF-is-reached.patch quakespasm-0.95.1+dfsg/debian/patches/sys_sdl_unix-Stop-reading-from-stdin-when-EOF-is-reached.patch
--- quakespasm-0.95.1+dfsg/debian/patches/sys_sdl_unix-Stop-reading-from-stdin-when-EOF-is-reached.patch 1970-01-01 01:00:00.000000000 +0100
+++ quakespasm-0.95.1+dfsg/debian/patches/sys_sdl_unix-Stop-reading-from-stdin-when-EOF-is-reached.patch 2023-03-07 11:56:29.000000000 +0000
@@ -0,0 +1,58 @@
+From: Simon McVittie <[email protected]>
+Date: Tue, 7 Mar 2023 11:46:00 +0000
+Subject: sys_sdl_unix: Stop reading from stdin when EOF is reached
+
+If the quakespasm server is run noninteractively with stdin redirected
+from /dev/null (for example as a systemd service), this loop would
+previously ignore EOF (read() returns 0) and append the uninitialized
+contents of `c` to the buffer once per iteration, until the buffer is
+full, at which point it would log "Console input too long!" and repeat.
+
+For completeness, treat read errors (read() returns -1) as equivalent
+to EOF.
+
+Bug: https://sourceforge.net/p/quakespasm/bugs/59/
+Bug-Debian: https://bugs.debian.org/1032276
+Signed-off-by: Simon McVittie <[email protected]>
+---
+ Quake/sys_sdl_unix.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/Quake/sys_sdl_unix.c b/Quake/sys_sdl_unix.c
+index 8820dc5..061e946 100644
+--- a/Quake/sys_sdl_unix.c
++++ b/Quake/sys_sdl_unix.c
+@@ -417,20 +417,32 @@ double Sys_DoubleTime (void)
+
+ const char *Sys_ConsoleInput (void)
+ {
++ static qboolean con_eof = false;
+ static char con_text[256];
+ static int textlen;
+ char c;
+ fd_set set;
+ struct timeval timeout;
++ ssize_t n;
+
+ FD_ZERO (&set);
+ FD_SET (0, &set); // stdin
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 0;
+
++ if (con_eof)
++ return NULL;
++
+ while (select (1, &set, NULL, NULL, &timeout))
+ {
+- read (0, &c, 1);
++ n = read (0, &c, 1);
++ if (n <= 0)
++ {
++ // Finish processing whatever is already in the
++ // buffer (if anything), then stop reading
++ con_eof = true;
++ c = '\n';
++ }
+ if (c == '\n' || c == '\r')
+ {
+ con_text[textlen] = '\0';
diff -Nru quakespasm-0.95.1+dfsg/Quake/sys_sdl_unix.c quakespasm-0.95.1+dfsg/Quake/sys_sdl_unix.c
--- quakespasm-0.95.1+dfsg/Quake/sys_sdl_unix.c 2022-10-25 08:35:20.000000000 +0100
+++ quakespasm-0.95.1+dfsg/Quake/sys_sdl_unix.c 2023-03-07 12:10:32.000000000 +0000
@@ -417,20 +417,32 @@
const char *Sys_ConsoleInput (void)
{
+ static qboolean con_eof = false;
static char con_text[256];
static int textlen;
char c;
fd_set set;
struct timeval timeout;
+ ssize_t n;
FD_ZERO (&set);
FD_SET (0, &set); // stdin
timeout.tv_sec = 0;
timeout.tv_usec = 0;
+ if (con_eof)
+ return NULL;
+
while (select (1, &set, NULL, NULL, &timeout))
{
- read (0, &c, 1);
+ n = read (0, &c, 1);
+ if (n <= 0)
+ {
+ // Finish processing whatever is already in the
+ // buffer (if anything), then stop reading
+ con_eof = true;
+ c = '\n';
+ }
if (c == '\n' || c == '\r')
{
con_text[textlen] = '\0';
--- End Message ---
--- Begin Message ---
Hint added, quakespasm has migrated.
--- End Message ---