diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
index bc32eab211c8de0dff6f859ad873e78a15afbcc4..297e631ff5dfd9ea5947ed80f489e8dc422bf71e 100644
--- a/libavcodec/pngdec.c
+++ b/libavcodec/pngdec.c
@@ -272,7 +272,8 @@ static void png_filter_row(PNGDSPContext *dsp, uint8_t *dst, int filter_type,
         if (bpp > 2 && size > 4) {
             /* would write off the end of the array if we let it process
              * the last pixel with bpp=3 */
-            int w = bpp == 4 ? size : size - 3;
+            int w = (bpp & 3) ? size - 3 : size;
+
             if (w > i) {
                 dsp->add_paeth_prediction(dst + i, src + i, last + i, size - i, bpp);
                 i = w;