diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp
index 8233281..11c0f2d 100644
--- a/core/fpdfapi/edit/cpdf_creator.cpp
+++ b/core/fpdfapi/edit/cpdf_creator.cpp
@@ -32,7 +32,7 @@
 class CFX_FileBufferArchive final : public IFX_ArchiveStream {
  public:
   explicit CFX_FileBufferArchive(
-      const RetainPtr<IFX_RetainableWriteStream>& archive);
+      const RetainPtr<IFX_RetainableWriteStream>& file);
   ~CFX_FileBufferArchive() override;
 
   bool WriteBlock(const void* pBuf, size_t size) override;
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.h b/core/fpdfapi/edit/cpdf_pagecontentgenerator.h
index ead3950..40d19ae 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.h
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.h
@@ -58,7 +58,7 @@
 
   // Add buffer as a stream in page's 'Contents'
   void UpdateContentStreams(
-      std::map<int32_t, std::unique_ptr<std::ostringstream>>* buf);
+      std::map<int32_t, std::unique_ptr<std::ostringstream>>* new_stream_data);
 
   // Set the stream index of all page objects with stream index ==
   // |CPDF_PageObject::kNoContentStream|. These are new objects that had not
diff --git a/core/fpdfapi/edit/cpdf_pagecontentmanager.h b/core/fpdfapi/edit/cpdf_pagecontentmanager.h
index cf5021c..2e2b225 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentmanager.h
+++ b/core/fpdfapi/edit/cpdf_pagecontentmanager.h
@@ -19,7 +19,7 @@
 
 class CPDF_PageContentManager {
  public:
-  explicit CPDF_PageContentManager(const CPDF_PageObjectHolder* pObjHolder);
+  explicit CPDF_PageContentManager(const CPDF_PageObjectHolder* obj_holder);
   ~CPDF_PageContentManager();
 
   // Gets the Content stream at a given index. If Contents is a single stream
diff --git a/core/fpdfapi/font/cpdf_cmapparser.h b/core/fpdfapi/font/cpdf_cmapparser.h
index d8ccfd3..b62985d 100644
--- a/core/fpdfapi/font/cpdf_cmapparser.h
+++ b/core/fpdfapi/font/cpdf_cmapparser.h
@@ -16,10 +16,10 @@
 
 class CPDF_CMapParser {
  public:
-  explicit CPDF_CMapParser(CPDF_CMap* pMap);
+  explicit CPDF_CMapParser(CPDF_CMap* pCMap);
   ~CPDF_CMapParser();
 
-  void ParseWord(ByteStringView str);
+  void ParseWord(ByteStringView word);
   bool HasAdditionalMappings() const {
     return !m_AdditionalCharcodeToCIDMappings.empty();
   }
diff --git a/core/fpdfapi/font/cpdf_font.h b/core/fpdfapi/font/cpdf_font.h
index 8639a19..34141e0 100644
--- a/core/fpdfapi/font/cpdf_font.h
+++ b/core/fpdfapi/font/cpdf_font.h
@@ -105,7 +105,7 @@
   virtual bool Load() = 0;
 
   void LoadUnicodeMap() const;  // logically const only.
-  void LoadFontDescriptor(const CPDF_Dictionary* pDict);
+  void LoadFontDescriptor(const CPDF_Dictionary* pFontDesc);
   void CheckFontMetrics();
 
   UnownedPtr<CPDF_Document> const m_pDocument;
diff --git a/core/fpdfapi/page/cpdf_colorspace.h b/core/fpdfapi/page/cpdf_colorspace.h
index 193268b..d3057fc 100644
--- a/core/fpdfapi/page/cpdf_colorspace.h
+++ b/core/fpdfapi/page/cpdf_colorspace.h
@@ -48,10 +48,10 @@
   static RetainPtr<CPDF_ColorSpace> GetStockCS(int Family);
   static RetainPtr<CPDF_ColorSpace> ColorspaceFromName(const ByteString& name);
   static RetainPtr<CPDF_ColorSpace> Load(CPDF_Document* pDoc,
-                                         CPDF_Object* pCSObj);
+                                         CPDF_Object* pObj);
   static RetainPtr<CPDF_ColorSpace> Load(
       CPDF_Document* pDoc,
-      const CPDF_Object* pCSObj,
+      const CPDF_Object* pObj,
       std::set<const CPDF_Object*>* pVisited);
   static uint32_t ComponentsForFamily(int family);
 
diff --git a/core/fpdfapi/page/cpdf_contentmarks.h b/core/fpdfapi/page/cpdf_contentmarks.h
index 5c05936..7bb25ec 100644
--- a/core/fpdfapi/page/cpdf_contentmarks.h
+++ b/core/fpdfapi/page/cpdf_contentmarks.h
@@ -33,7 +33,7 @@
   void AddMark(ByteString name);
   void AddMarkWithDirectDict(ByteString name, CPDF_Dictionary* pDict);
   void AddMarkWithPropertiesHolder(const ByteString& name,
-                                   CPDF_Dictionary* pHolder,
+                                   CPDF_Dictionary* pDict,
                                    const ByteString& property_name);
   bool RemoveMark(CPDF_ContentMarkItem* pMarkItem);
   void DeleteLastMark();
@@ -55,7 +55,7 @@
     void AddMark(ByteString name);
     void AddMarkWithDirectDict(ByteString name, CPDF_Dictionary* pDict);
     void AddMarkWithPropertiesHolder(const ByteString& name,
-                                     CPDF_Dictionary* pHolder,
+                                     CPDF_Dictionary* pDict,
                                      const ByteString& property_name);
     bool RemoveMark(CPDF_ContentMarkItem* pMarkItem);
     void DeleteLastMark();
diff --git a/core/fpdfapi/page/cpdf_docpagedata.h b/core/fpdfapi/page/cpdf_docpagedata.h
index 08758d0..9140372 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.h
+++ b/core/fpdfapi/page/cpdf_docpagedata.h
@@ -41,7 +41,7 @@
       const CPDF_Stream* pFontStream) override;
   void MaybePurgeFontFileStreamAcc(const CPDF_Stream* pFontStream) override;
 
-  void Clear(bool bRelease);
+  void Clear(bool bForceRelease);
   bool IsForceClear() const { return m_bForceClear; }
 
   CPDF_Font* AddFont(CFX_Font* pFont, int charset);
diff --git a/core/fpdfapi/page/cpdf_image.h b/core/fpdfapi/page/cpdf_image.h
index 44f3f84..7bcb648 100644
--- a/core/fpdfapi/page/cpdf_image.h
+++ b/core/fpdfapi/page/cpdf_image.h
@@ -47,7 +47,7 @@
 
   RetainPtr<CFX_DIBBase> LoadDIBBase() const;
 
-  void SetImage(const RetainPtr<CFX_DIBitmap>& pDIBitmap);
+  void SetImage(const RetainPtr<CFX_DIBitmap>& pBitmap);
   void SetJpegImage(const RetainPtr<IFX_SeekableReadStream>& pFile);
   void SetJpegImageInline(const RetainPtr<IFX_SeekableReadStream>& pFile);
 
diff --git a/core/fpdfapi/page/cpdf_pathobject.h b/core/fpdfapi/page/cpdf_pathobject.h
index c2166b3..c8edcb1 100644
--- a/core/fpdfapi/page/cpdf_pathobject.h
+++ b/core/fpdfapi/page/cpdf_pathobject.h
@@ -20,7 +20,7 @@
 
   // CPDF_PageObject
   Type GetType() const override;
-  void Transform(const CFX_Matrix& maxtrix) override;
+  void Transform(const CFX_Matrix& matrix) override;
   bool IsPath() const override;
   CPDF_PathObject* AsPath() override;
   const CPDF_PathObject* AsPath() const override;
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.h b/core/fpdfapi/page/cpdf_streamcontentparser.h
index 0af1922..45cf0ba 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.h
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.h
@@ -40,10 +40,10 @@
                            CPDF_Dictionary* pPageResources,
                            CPDF_Dictionary* pParentResources,
                            const CFX_Matrix* pmtContentToUser,
-                           CPDF_PageObjectHolder* pObjectHolder,
+                           CPDF_PageObjectHolder* pObjHolder,
                            CPDF_Dictionary* pResources,
                            const CFX_FloatRect& rcBBox,
-                           const CPDF_AllStates* pAllStates,
+                           const CPDF_AllStates* pStates,
                            std::set<const uint8_t*>* parsedSet);
   ~CPDF_StreamContentParser();
 
@@ -81,7 +81,7 @@
   using OpCodes = std::map<uint32_t, void (CPDF_StreamContentParser::*)()>;
   static OpCodes InitializeOpCodes();
 
-  void AddNameParam(ByteStringView str);
+  void AddNameParam(ByteStringView bsName);
   void AddNumberParam(ByteStringView str);
   void AddObjectParam(RetainPtr<CPDF_Object> pObj);
   int GetNextParamPos();
diff --git a/core/fpdfapi/page/cpdf_textobject.h b/core/fpdfapi/page/cpdf_textobject.h
index 9ed5ff7..076dcbb 100644
--- a/core/fpdfapi/page/cpdf_textobject.h
+++ b/core/fpdfapi/page/cpdf_textobject.h
@@ -51,7 +51,7 @@
   CPDF_Font* GetFont() const;
   float GetFontSize() const;
 
-  void SetText(const ByteString& text);
+  void SetText(const ByteString& str);
   void SetPosition(CFX_PointF pos) { m_Pos = pos; }
   void SetPosition(float x, float y);
 
diff --git a/core/fpdfapi/page/cpdf_textstate.h b/core/fpdfapi/page/cpdf_textstate.h
index c1c50ea..a466db6 100644
--- a/core/fpdfapi/page/cpdf_textstate.h
+++ b/core/fpdfapi/page/cpdf_textstate.h
@@ -83,7 +83,7 @@
 
    private:
     TextData();
-    TextData(const TextData& src);
+    TextData(const TextData& that);
     ~TextData() override;
 
     void ReleaseFont();
diff --git a/core/fpdfapi/parser/cpdf_array.h b/core/fpdfapi/parser/cpdf_array.h
index 450ca99..aa25e82 100644
--- a/core/fpdfapi/parser/cpdf_array.h
+++ b/core/fpdfapi/parser/cpdf_array.h
@@ -106,7 +106,8 @@
 
   void Clear();
   void RemoveAt(size_t index);
-  void ConvertToIndirectObjectAt(size_t index, CPDF_IndirectObjectHolder* pDoc);
+  void ConvertToIndirectObjectAt(size_t index,
+                                 CPDF_IndirectObjectHolder* pHolder);
   bool IsLocked() const { return !!m_LockCount; }
 
  private:
diff --git a/core/fpdfapi/parser/cpdf_crypto_handler.h b/core/fpdfapi/parser/cpdf_crypto_handler.h
index c760f61..5198c98 100644
--- a/core/fpdfapi/parser/cpdf_crypto_handler.h
+++ b/core/fpdfapi/parser/cpdf_crypto_handler.h
@@ -30,7 +30,7 @@
   bool DecryptObjectTree(RetainPtr<CPDF_Object> object);
   size_t EncryptGetSize(pdfium::span<const uint8_t> source) const;
   bool EncryptContent(uint32_t objnum,
-                      uint32_t version,
+                      uint32_t gennum,
                       pdfium::span<const uint8_t> source,
                       uint8_t* dest_buf,
                       uint32_t& dest_size);
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index cdcb4ff..01c2a67 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -114,8 +114,8 @@
   return GetObjectType(objnum) == ObjectType::kFree;
 }
 
-void CPDF_Parser::ShrinkObjectMap(uint32_t objnum) {
-  m_CrossRefTable->ShrinkObjectMap(objnum);
+void CPDF_Parser::ShrinkObjectMap(uint32_t size) {
+  m_CrossRefTable->ShrinkObjectMap(size);
 }
 
 bool CPDF_Parser::InitSyntaxParser(
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index 29c4bfb..01f90c9 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -55,7 +55,7 @@
   void InitStreamFromFile(const RetainPtr<IFX_SeekableReadStream>& pFile,
                           RetainPtr<CPDF_Dictionary> pDict);
 
-  bool ReadRawData(FX_FILESIZE start_pos,
+  bool ReadRawData(FX_FILESIZE offset,
                    uint8_t* pBuf,
                    uint32_t buf_size) const;
 
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index d510c19..f21b5e5 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -767,9 +767,9 @@
   return true;
 }
 
-bool CPDF_SyntaxParser::BackwardsSearchToWord(ByteStringView tag,
+bool CPDF_SyntaxParser::BackwardsSearchToWord(ByteStringView word,
                                               FX_FILESIZE limit) {
-  int32_t taglen = tag.GetLength();
+  int32_t taglen = word.GetLength();
   if (taglen == 0)
     return false;
 
@@ -783,18 +783,18 @@
     if (!GetCharAtBackward(pos, &byte))
       return false;
 
-    if (byte == tag[offset]) {
+    if (byte == word[offset]) {
       offset--;
       if (offset >= 0) {
         pos--;
         continue;
       }
-      if (IsWholeWord(pos, limit, tag, false)) {
+      if (IsWholeWord(pos, limit, word, false)) {
         m_Pos = pos;
         return true;
       }
     }
-    offset = byte == tag[taglen - 1] ? taglen - 2 : taglen - 1;
+    offset = byte == word[taglen - 1] ? taglen - 2 : taglen - 1;
     pos--;
     if (pos < 0)
       return false;
diff --git a/core/fpdfapi/parser/fpdf_parser_utility.cpp b/core/fpdfapi/parser/fpdf_parser_utility.cpp
index 540aabd..053ee05 100644
--- a/core/fpdfapi/parser/fpdf_parser_utility.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_utility.cpp
@@ -90,23 +90,23 @@
   return pObj ? pObj->GetInteger() : 0;
 }
 
-ByteString PDF_NameDecode(ByteStringView bstr) {
-  if (!bstr.Contains('#'))
-    return ByteString(bstr);
+ByteString PDF_NameDecode(ByteStringView orig) {
+  if (!orig.Contains('#'))
+    return ByteString(orig);
 
-  size_t src_size = bstr.GetLength();
+  size_t src_size = orig.GetLength();
   size_t out_index = 0;
   ByteString result;
   {
     // Span's lifetime must end before ReleaseBuffer() below.
     pdfium::span<char> pDest = result.GetBuffer(src_size);
     for (size_t i = 0; i < src_size; i++) {
-      if (bstr[i] == '#' && i + 2 < src_size) {
-        pDest[out_index++] = FXSYS_HexCharToInt(bstr[i + 1]) * 16 +
-                             FXSYS_HexCharToInt(bstr[i + 2]);
+      if (orig[i] == '#' && i + 2 < src_size) {
+        pDest[out_index++] = FXSYS_HexCharToInt(orig[i + 1]) * 16 +
+                             FXSYS_HexCharToInt(orig[i + 2]);
         i += 2;
       } else {
-        pDest[out_index++] = bstr[i];
+        pDest[out_index++] = orig[i];
       }
     }
   }
diff --git a/core/fpdfapi/render/cpdf_charposlist.cpp b/core/fpdfapi/render/cpdf_charposlist.cpp
index c14f14b..7fc1e24 100644
--- a/core/fpdfapi/render/cpdf_charposlist.cpp
+++ b/core/fpdfapi/render/cpdf_charposlist.cpp
@@ -15,7 +15,7 @@
 CPDF_CharPosList::CPDF_CharPosList(const std::vector<uint32_t>& charCodes,
                                    const std::vector<float>& charPos,
                                    CPDF_Font* pFont,
-                                   float FontSize) {
+                                   float font_size) {
   m_CharPos.reserve(charCodes.size());
   CPDF_CIDFont* pCIDFont = pFont->AsCIDFont();
   bool bVertWriting = pCIDFont && pCIDFont->IsVertWriting();
@@ -72,7 +72,7 @@
         // Move the initial x position by half of the excess (transformed to
         // text space coordinates).
         charpos.m_Origin.x +=
-            (pdfGlyphWidth - ftGlyphWidth) * FontSize / 2000.0f;
+            (pdfGlyphWidth - ftGlyphWidth) * font_size / 2000.0f;
       } else if (pdfGlyphWidth && ftGlyphWidth &&
                  pdfGlyphWidth < ftGlyphWidth) {
         scalingFactor = static_cast<float>(pdfGlyphWidth) / ftGlyphWidth;
@@ -93,8 +93,8 @@
       short vx;
       short vy;
       pCIDFont->GetVertOrigin(CID, vx, vy);
-      charpos.m_Origin.x -= FontSize * vx / 1000;
-      charpos.m_Origin.y -= FontSize * vy / 1000;
+      charpos.m_Origin.x -= font_size * vx / 1000;
+      charpos.m_Origin.y -= font_size * vy / 1000;
     }
 
     const uint8_t* pTransform = pCIDFont->GetCIDTransform(CID);
@@ -106,9 +106,9 @@
       charpos.m_AdjustMatrix[2] = pCIDFont->CIDTransformToFloat(pTransform[2]);
       charpos.m_AdjustMatrix[3] = pCIDFont->CIDTransformToFloat(pTransform[3]);
       charpos.m_Origin.x +=
-          pCIDFont->CIDTransformToFloat(pTransform[4]) * FontSize;
+          pCIDFont->CIDTransformToFloat(pTransform[4]) * font_size;
       charpos.m_Origin.y +=
-          pCIDFont->CIDTransformToFloat(pTransform[5]) * FontSize;
+          pCIDFont->CIDTransformToFloat(pTransform[5]) * font_size;
       charpos.m_bGlyphAdjust = true;
     }
   }
diff --git a/core/fpdfapi/render/cpdf_dibbase.h b/core/fpdfapi/render/cpdf_dibbase.h
index 92d192a..87e450a 100644
--- a/core/fpdfapi/render/cpdf_dibbase.h
+++ b/core/fpdfapi/render/cpdf_dibbase.h
@@ -92,7 +92,7 @@
   RetainPtr<CFX_DIBitmap> LoadJpxBitmap();
   void LoadPalette();
   LoadState CreateDecoder();
-  bool CreateDCTDecoder(pdfium::span<const uint8_t> src_data,
+  bool CreateDCTDecoder(pdfium::span<const uint8_t> src_span,
                         const CPDF_Dictionary* pParams);
   void TranslateScanline24bpp(uint8_t* dest_scan,
                               const uint8_t* src_scan) const;
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.h b/core/fpdfapi/render/cpdf_imagerenderer.h
index f12b6a5..bfedfc1 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.h
+++ b/core/fpdfapi/render/cpdf_imagerenderer.h
@@ -69,8 +69,8 @@
   bool NotDrawing() const;
   FX_RECT GetDrawRect() const;
   CFX_Matrix GetDrawMatrix(const FX_RECT& rect) const;
-  void CalculateDrawImage(CFX_DefaultRenderDevice* bitmap_device1,
-                          CFX_DefaultRenderDevice* bitmap_device2,
+  void CalculateDrawImage(CFX_DefaultRenderDevice* pBitmapDevice1,
+                          CFX_DefaultRenderDevice* pBitmapDevice2,
                           const RetainPtr<CFX_DIBBase>& pDIBBase,
                           const CFX_Matrix& mtNewMatrix,
                           const FX_RECT& rect) const;
diff --git a/core/fpdfapi/render/cpdf_rendercontext.h b/core/fpdfapi/render/cpdf_rendercontext.h
index ff4911d..679d11b 100644
--- a/core/fpdfapi/render/cpdf_rendercontext.h
+++ b/core/fpdfapi/render/cpdf_rendercontext.h
@@ -45,12 +45,12 @@
 
   void Render(CFX_RenderDevice* pDevice,
               const CPDF_RenderOptions* pOptions,
-              const CFX_Matrix* pFinalMatrix);
+              const CFX_Matrix* pLastMatrix);
 
   void Render(CFX_RenderDevice* pDevice,
               const CPDF_PageObject* pStopObj,
               const CPDF_RenderOptions* pOptions,
-              const CFX_Matrix* pFinalMatrix);
+              const CFX_Matrix* pLastMatrix);
 
   void GetBackground(const RetainPtr<CFX_DIBitmap>& pBuffer,
                      const CPDF_PageObject* pObj,
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 696f842..416ed1e 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1007,24 +1007,24 @@
 
 CPDF_RenderStatus::~CPDF_RenderStatus() {}
 
-void CPDF_RenderStatus::Initialize(const CPDF_RenderStatus* pParentState,
+void CPDF_RenderStatus::Initialize(const CPDF_RenderStatus* pParentStatus,
                                    const CPDF_GraphicStates* pInitialStates) {
   m_bPrint = m_pDevice->GetDeviceType() != DeviceType::kDisplay;
   m_pPageResource.Reset(m_pContext->GetPageResources());
   if (pInitialStates && !m_pType3Char) {
     m_InitialStates.CopyStates(*pInitialStates);
-    if (pParentState) {
+    if (pParentStatus) {
       if (!m_InitialStates.m_ColorState.HasFillColor()) {
         m_InitialStates.m_ColorState.SetFillColorRef(
-            pParentState->m_InitialStates.m_ColorState.GetFillColorRef());
+            pParentStatus->m_InitialStates.m_ColorState.GetFillColorRef());
         *m_InitialStates.m_ColorState.GetMutableFillColor() =
-            *pParentState->m_InitialStates.m_ColorState.GetFillColor();
+            *pParentStatus->m_InitialStates.m_ColorState.GetFillColor();
       }
       if (!m_InitialStates.m_ColorState.HasStrokeColor()) {
         m_InitialStates.m_ColorState.SetStrokeColorRef(
-            pParentState->m_InitialStates.m_ColorState.GetFillColorRef());
+            pParentStatus->m_InitialStates.m_ColorState.GetFillColorRef());
         *m_InitialStates.m_ColorState.GetMutableStrokeColor() =
-            *pParentState->m_InitialStates.m_ColorState.GetStrokeColor();
+            *pParentStatus->m_InitialStates.m_ColorState.GetStrokeColor();
       }
     }
   } else {
diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h
index 8208347..4e9476e 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.h
+++ b/core/fpdfapi/render/cpdf_renderstatus.h
@@ -121,7 +121,7 @@
   FX_ARGB GetFillArgbInternal(CPDF_PageObject* pObj, bool bType3) const;
   bool ProcessTransparency(CPDF_PageObject* PageObj,
                            const CFX_Matrix& mtObj2Device);
-  void ProcessObjectNoClip(CPDF_PageObject* PageObj,
+  void ProcessObjectNoClip(CPDF_PageObject* pObj,
                            const CFX_Matrix& mtObj2Device);
   void DrawObjWithBackground(CPDF_PageObject* pObj,
                              const CFX_Matrix& mtObj2Device);
@@ -178,7 +178,7 @@
                        int* pCSFamily);
   static RetainPtr<CPDF_Type3Cache> GetCachedType3(CPDF_Type3Font* pFont);
   static std::unique_ptr<CPDF_GraphicStates> CloneObjStates(
-      const CPDF_GraphicStates* pPathObj,
+      const CPDF_GraphicStates* pSrcStates,
       bool bStroke);
   FX_ARGB GetStrokeArgb(CPDF_PageObject* pObj) const;
   FX_RECT GetObjectClippedRect(const CPDF_PageObject* pObj,
