From 23b565cec544e51daf902fba1a2bb4ce0c97ced0 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Tue, 30 Jan 2024 17:01:09 -0600 Subject: [PATCH] Drop papersprite draws that are too wide This prevents an arithmetic overflow when evaluating xscale, resulting in a negative xscale. --- src/r_things.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/r_things.cpp b/src/r_things.cpp index 8dcd89df6..d83e61f27 100644 --- a/src/r_things.cpp +++ b/src/r_things.cpp @@ -2081,11 +2081,21 @@ static void R_ProjectSprite(mobj_t *thing) if (x2 < 0) return; - if ((range = x2 - x1) <= 0) + range = x2 - x1; + if (range < 0) + { return; + } range++; // fencepost problem + if (range > 32767) + { + // If the range happens to be too large for fixed_t, + // abort the draw to avoid xscale becoming negative due to arithmetic overflow. + return; + } + scalestep = ((yscale2 - yscale)/range); if (scalestep == 0)