Consistently store JpegCommon into cinfo.client_data.

Currently, it stores either the address of a jmp_buf, or the address
of a CJpegContext depending on the callers. Make this consistent to
ensure there isn't a possibility of confusion.

Change-Id: I59b2f18501c422e55f4fd9cb8e04a09c37a2a56f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/126370
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcodec/jpeg/jpeg_common.h b/core/fxcodec/jpeg/jpeg_common.h
index 677e44d..6dda4b9 100644
--- a/core/fxcodec/jpeg/jpeg_common.h
+++ b/core/fxcodec/jpeg/jpeg_common.h
@@ -41,6 +41,7 @@
   struct jpeg_decompress_struct cinfo;
   struct jpeg_error_mgr error_mgr;
   struct jpeg_source_mgr source_mgr;
+  unsigned int skip_size;
 };
 typedef struct JpegCommon JpegCommon;
 
diff --git a/core/fxcodec/jpeg/jpeg_progressive_decoder.cpp b/core/fxcodec/jpeg/jpeg_progressive_decoder.cpp
index 9f6072a..21d7b6e 100644
--- a/core/fxcodec/jpeg/jpeg_progressive_decoder.cpp
+++ b/core/fxcodec/jpeg/jpeg_progressive_decoder.cpp
@@ -27,20 +27,19 @@
   jmp_buf& GetJumpMark() { return m_Common.jmpbuf; }
 
   JpegCommon m_Common = {};
-  unsigned int m_SkipSize = 0;
 };
 
 extern "C" {
 
 static void error_fatal(j_common_ptr cinfo) {
-  auto* pContext = reinterpret_cast<CJpegContext*>(cinfo->client_data);
-  longjmp(pContext->m_Common.jmpbuf, -1);
+  auto* pCommon = reinterpret_cast<JpegCommon*>(cinfo->client_data);
+  longjmp(pCommon->jmpbuf, -1);
 }
 
 static void src_skip_data(jpeg_decompress_struct* cinfo, long num) {
   if (cinfo->src->bytes_in_buffer < static_cast<size_t>(num)) {
-    auto* pContext = reinterpret_cast<CJpegContext*>(cinfo->client_data);
-    pContext->m_SkipSize = (unsigned int)(num - cinfo->src->bytes_in_buffer);
+    auto* pCommon = reinterpret_cast<JpegCommon*>(cinfo->client_data);
+    pCommon->skip_size = (unsigned int)(num - cinfo->src->bytes_in_buffer);
     cinfo->src->bytes_in_buffer = 0;
   } else {
     // SAFETY: required from library during callback.
@@ -60,7 +59,7 @@
 }
 
 CJpegContext::CJpegContext() {
-  m_Common.cinfo.client_data = this;
+  m_Common.cinfo.client_data = &m_Common;
   m_Common.cinfo.err = &m_Common.error_mgr;
 
   m_Common.error_mgr.error_exit = error_fatal;
@@ -113,7 +112,7 @@
     return nullptr;
   }
   pContext->m_Common.cinfo.src = &pContext->m_Common.source_mgr;
-  pContext->m_SkipSize = 0;
+  pContext->m_Common.skip_size = 0;
   return pContext;
 }
 
@@ -168,14 +167,14 @@
                                    RetainPtr<CFX_CodecMemory> codec_memory) {
   pdfium::span<uint8_t> src_buf = codec_memory->GetUnconsumedSpan();
   auto* ctx = static_cast<CJpegContext*>(pContext);
-  if (ctx->m_SkipSize) {
-    if (ctx->m_SkipSize > src_buf.size()) {
+  if (ctx->m_Common.skip_size) {
+    if (ctx->m_Common.skip_size > src_buf.size()) {
       ctx->m_Common.source_mgr.bytes_in_buffer = 0;
-      ctx->m_SkipSize -= src_buf.size();
+      ctx->m_Common.skip_size -= src_buf.size();
       return true;
     }
-    src_buf = src_buf.subspan(ctx->m_SkipSize);
-    ctx->m_SkipSize = 0;
+    src_buf = src_buf.subspan(ctx->m_Common.skip_size);
+    ctx->m_Common.skip_size = 0;
   }
   ctx->m_Common.source_mgr.next_input_byte = src_buf.data();
   ctx->m_Common.source_mgr.bytes_in_buffer = src_buf.size();
diff --git a/core/fxcodec/jpeg/jpegmodule.cpp b/core/fxcodec/jpeg/jpegmodule.cpp
index 664a454..068e99e 100644
--- a/core/fxcodec/jpeg/jpegmodule.cpp
+++ b/core/fxcodec/jpeg/jpegmodule.cpp
@@ -38,7 +38,8 @@
 extern "C" {
 
 static void error_fatal(j_common_ptr cinfo) {
-  longjmp(*(jmp_buf*)cinfo->client_data, -1);
+  auto* pCommon = reinterpret_cast<JpegCommon*>(cinfo->client_data);
+  longjmp(pCommon->jmpbuf, -1);
 }
 
 static void src_skip_data(jpeg_decompress_struct* cinfo, long num) {
@@ -72,7 +73,7 @@
   jpeg_common.error_mgr.reset_error_mgr = jpeg_common_error_do_nothing;
   jpeg_common.error_mgr.trace_level = 0;
   jpeg_common.cinfo.err = &jpeg_common.error_mgr;
-  jpeg_common.cinfo.client_data = &jpeg_common.jmpbuf;
+  jpeg_common.cinfo.client_data = &jpeg_common;
   if (!jpeg_common_create_decompress(&jpeg_common)) {
     return false;
   }
@@ -168,7 +169,7 @@
 
 bool JpegDecoder::InitDecode(bool bAcceptKnownBadHeader) {
   m_Common.cinfo.err = &m_Common.error_mgr;
-  m_Common.cinfo.client_data = &m_Common.jmpbuf;
+  m_Common.cinfo.client_data = &m_Common;
   if (!jpeg_common_create_decompress(&m_Common)) {
     return false;
   }