Fix reading refine-one symbols in huffman symbol dictionaries using refinement

The symbol ID table is a uniform huffman table, which is just a
roundabout way of saying that every symbol is a uint that needs exactly
N bits.

The test will go into the corpus tests.

Bug: 459326233
Change-Id: Icc3b81430f34eb450771ba5bed31e13d1236beaf
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/137910
Commit-Queue: Nico Weber <thakis@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Nico Weber <thakis@google.com>
diff --git a/core/fxcodec/jbig2/JBig2_SddProc.cpp b/core/fxcodec/jbig2/JBig2_SddProc.cpp
index 9f2c148..2d5a182 100644
--- a/core/fxcodec/jbig2/JBig2_SddProc.cpp
+++ b/core/fxcodec/jbig2/JBig2_SddProc.cpp
@@ -378,22 +378,17 @@
             nTmp++;
           }
           uint8_t SBSYMCODELEN = (uint8_t)nTmp;
-          uint32_t uVal = 0;
-          uint32_t IDI;
-          for (;;) {
+          uint32_t IDI = 0;
+          for (uint32_t n = 0; n < SBSYMCODELEN; ++n) {
             if (pStream->read1Bit(&nTmp) != 0) {
               return nullptr;
             }
 
-            uVal = (uVal << 1) | nTmp;
-            if (uVal >= SBNUMSYMS) {
-              return nullptr;
-            }
+            IDI = (IDI << 1) | nTmp;
+          }
 
-            IDI = SBSYMCODELEN == 0 ? uVal : SBNUMSYMS;
-            if (IDI < SBNUMSYMS) {
-              break;
-            }
+          if (IDI >= SBNUMSYMS) {
+            return nullptr;
           }
 
           CJBig2_Image* sbsyms_idi = GetImage(IDI, SDNEWSYMS);