From 3b5aee3f93c5f620a7f5b1777dbc6cf33b74e7ca Mon Sep 17 00:00:00 2001
From: Petter Reinholdtsen <pere@debian.org>
Date: Sun, 9 Mar 2025 07:34:52 +0100
Subject: [PATCH] Dropped self assignment when initialising variables in
 tokenize.c.

The 'int x=x' style statement do not make sense and cause problems with
some compilers.  Replace it with more sensible initializers to ensure
the value have a well known starting point.  Using initializers
proposed by Timothy B. Terriberry in !25.

Added -Werror=uninitialized -Winit-self to default GCC build to ensure
this style of statement do not sneak into the code again.

Fixes #2317
---
 configure.ac   |  6 +++---
 lib/tokenize.c | 16 ++++++++--------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/configure.ac b/configure.ac
index fb5d9b25..d4d1fd02 100644
--- a/configure.ac
+++ b/configure.ac
@@ -189,9 +189,9 @@ else
 
         case $host in 
         *)
-                DEBUG="-g -Wall -Wno-parentheses -DDEBUG -D__NO_MATH_INLINES"
-                CFLAGS="-Wall -Wno-parentheses -O3 -fomit-frame-pointer -finline-functions -funroll-loops"
-                PROFILE="-Wall -Wno-parentheses -pg -g -O3 -fno-inline-functions -DDEBUG";;
+                DEBUG="-g -Wall -Werror=uninitialized -Winit-self -Wno-parentheses -DDEBUG -D__NO_MATH_INLINES"
+                CFLAGS="-Wall -Werror=uninitialized -Winit-self -Wno-parentheses -O3 -fomit-frame-pointer -finline-functions -funroll-loops"
+                PROFILE="-Wall -Werror=uninitialized -Winit-self -Wno-parentheses -pg -g -O3 -fno-inline-functions -DDEBUG";;
         esac
 fi
 CFLAGS="$CFLAGS $cflags_save"
diff --git a/lib/tokenize.c b/lib/tokenize.c
index 57b7aa8d..dee162c8 100644
--- a/lib/tokenize.c
+++ b/lib/tokenize.c
@@ -487,11 +487,11 @@ int oc_enc_tokenize_ac(oc_enc_ctx *_enc,int _pli,ptrdiff_t _fragi,
   zzj=64;
   for(zzi=OC_MINI(_zzi,63);zzi>0;zzi--){
     ogg_uint32_t best_cost;
-    int          best_bits=best_bits;
-    int          best_next=best_next;
-    int          best_token=best_token;
-    int          best_eb=best_eb;
-    int          best_qc=best_qc;
+    int          best_bits=INT_MAX;
+    int          best_next=INT_MAX;
+    int          best_token=INT_MAX;
+    int          best_eb=INT_MAX;
+    int          best_qc=INT_MAX;
     ogg_uint32_t d2;
     int          dq;
     int          qc_m;
@@ -1091,8 +1091,8 @@ void oc_enc_tokenize_dc_frag_list(oc_enc_ctx *_enc,int _pli,
   int                neobs1;
   int                token;
   int                eb;
-  int                token1=token1;
-  int                eb1=eb1;
+  int                token1=OC_DCT_ZRL_TOKEN;
+  int                eb1=INT_MAX;
   /*Return immediately if there are no coded fragments; otherwise we'd flush
      any trailing EOB run into the AC 1 list and never read it back out.*/
   if(_ncoded_fragis<=0)return;
@@ -1328,7 +1328,7 @@ void oc_enc_tokenize_finish(oc_enc_ctx *_enc){
     int       new_eb;
     int       zzj;
     int       plj;
-    ptrdiff_t ti=ti;
+    ptrdiff_t ti=-1;
     int       run_count;
     /*Make sure this coefficient has tokens at all.*/
     if(_enc->ndct_tokens[pli][zzi]<=0)continue;
-- 
GitLab