BUILD: quic: Move an ASSUME_NONNULL() for variable which is not null
authorFrederic Lecaille <flecaille@haproxy.com>
Tue, 21 Jan 2025 15:26:42 +0000 (16:26 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 23 Jan 2025 10:33:18 +0000 (11:33 +0100)
Some new compilers warn that <oldest_lost> variable can be null even this cannot be
the case as mentioned by the comment about an already present ASSUME_NONNULL()
call comment as follows:

src/quic_loss.c: In function ‘qc_release_lost_pkts’:
src/quic_loss.c:307:86: error: potential null pointer dereference [-Werror=null-dereference]
  307 |   unsigned int period = newest_lost->time_sent_ms - oldest_lost->time_sent_ms;
      |                                                     ~~~~~~~~~~~^~~~~~~~~~~~~~

Move up this ASSUME_NONNULL() statement to please these compiler.

Must be backported as far as 2.6 to easy any further backport around this code part.

(cherry picked from commit 1f099db7e2ca978b467f0d524261af1d588d1d0a)
[cf: ALREADY_CHECKED() is moved because ASSUME_NONNULL() does not exist]
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit 0ef4f1bdbd7de903fc770b33da20eb741a5ac0a4)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

src/quic_loss.c

index fd9568a..0bf7a50 100644 (file)
@@ -272,6 +272,12 @@ int qc_release_lost_pkts(struct quic_conn *qc, struct quic_pktns *pktns,
                }
        }
 
+       /* <oldest_lost> cannot be NULL at this stage because we have ensured
+        * that <pkts> list is not empty. Without this, GCC 12.2.0 reports a
+        * possible overflow on a 0 byte region with O2 optimization.
+        */
+       ALREADY_CHECKED(oldest_lost);
+
        if (!close) {
                if (newest_lost) {
                        /* Sent a congestion event to the controller */
@@ -297,11 +303,6 @@ int qc_release_lost_pkts(struct quic_conn *qc, struct quic_pktns *pktns,
                }
        }
 
-       /* <oldest_lost> cannot be NULL at this stage because we have ensured
-        * that <pkts> list is not empty. Without this, GCC 12.2.0 reports a
-        * possible overflow on a 0 byte region with O2 optimization.
-        */
-       ALREADY_CHECKED(oldest_lost);
        quic_tx_packet_refdec(oldest_lost);
        if (newest_lost != oldest_lost)
                quic_tx_packet_refdec(newest_lost);