diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index 77d23a2..d5c13c7 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -348,37 +348,37 @@
 
   *buf << pPathObj->matrix() << " cm ";
 
-  const auto& pPoints = pPathObj->path().GetPoints();
+  const auto& points = pPathObj->path().GetPoints();
   if (pPathObj->path().IsRect()) {
-    CFX_PointF diff = pPoints[2].m_Point - pPoints[0].m_Point;
-    *buf << pPoints[0].m_Point << " " << diff << " re";
+    CFX_PointF diff = points[2].m_Point - points[0].m_Point;
+    *buf << points[0].m_Point << " " << diff << " re";
   } else {
-    for (size_t i = 0; i < pPoints.size(); i++) {
+    for (size_t i = 0; i < points.size(); ++i) {
       if (i > 0)
         *buf << " ";
 
-      *buf << pPoints[i].m_Point;
+      *buf << points[i].m_Point;
 
-      FXPT_TYPE pointType = pPoints[i].m_Type;
-      if (pointType == FXPT_TYPE::MoveTo) {
+      FXPT_TYPE point_type = points[i].m_Type;
+      if (point_type == FXPT_TYPE::MoveTo) {
         *buf << " m";
-      } else if (pointType == FXPT_TYPE::LineTo) {
+      } else if (point_type == FXPT_TYPE::LineTo) {
         *buf << " l";
-      } else if (pointType == FXPT_TYPE::BezierTo) {
-        if (i + 2 >= pPoints.size() ||
-            !pPoints[i].IsTypeAndOpen(FXPT_TYPE::BezierTo) ||
-            !pPoints[i + 1].IsTypeAndOpen(FXPT_TYPE::BezierTo) ||
-            pPoints[i + 2].m_Type != FXPT_TYPE::BezierTo) {
+      } else if (point_type == FXPT_TYPE::BezierTo) {
+        if (i + 2 >= points.size() ||
+            !points[i].IsTypeAndOpen(FXPT_TYPE::BezierTo) ||
+            !points[i + 1].IsTypeAndOpen(FXPT_TYPE::BezierTo) ||
+            points[i + 2].m_Type != FXPT_TYPE::BezierTo) {
           // If format is not supported, close the path and paint
           *buf << " h";
           break;
         }
         *buf << " ";
-        *buf << pPoints[i + 1].m_Point << " ";
-        *buf << pPoints[i + 2].m_Point << " c";
+        *buf << points[i + 1].m_Point << " ";
+        *buf << points[i + 2].m_Point << " c";
         i += 2;
       }
-      if (pPoints[i].m_CloseFigure)
+      if (points[i].m_CloseFigure)
         *buf << " h";
     }
   }
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index b2a7986..3e5a552 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -1088,29 +1088,29 @@
 
 void CAgg_PathData::BuildPath(const CFX_PathData* pPathData,
                               const CFX_Matrix* pObject2Device) {
-  const std::vector<FX_PATHPOINT>& pPoints = pPathData->GetPoints();
-  for (size_t i = 0; i < pPoints.size(); i++) {
-    CFX_PointF pos = pPoints[i].m_Point;
+  const std::vector<FX_PATHPOINT>& points = pPathData->GetPoints();
+  for (size_t i = 0; i < points.size(); ++i) {
+    CFX_PointF pos = points[i].m_Point;
     if (pObject2Device)
       pos = pObject2Device->Transform(pos);
 
     pos = HardClip(pos);
-    FXPT_TYPE point_type = pPoints[i].m_Type;
+    FXPT_TYPE point_type = points[i].m_Type;
     if (point_type == FXPT_TYPE::MoveTo) {
       m_PathData.move_to(pos.x, pos.y);
     } else if (point_type == FXPT_TYPE::LineTo) {
-      if (i > 0 && pPoints[i - 1].IsTypeAndOpen(FXPT_TYPE::MoveTo) &&
-          (i == pPoints.size() - 1 ||
-           pPoints[i + 1].IsTypeAndOpen(FXPT_TYPE::MoveTo)) &&
-          pPoints[i].m_Point == pPoints[i - 1].m_Point) {
+      if (i > 0 && points[i - 1].IsTypeAndOpen(FXPT_TYPE::MoveTo) &&
+          (i == points.size() - 1 ||
+           points[i + 1].IsTypeAndOpen(FXPT_TYPE::MoveTo)) &&
+          points[i].m_Point == points[i - 1].m_Point) {
         pos.x += 1;
       }
       m_PathData.line_to(pos.x, pos.y);
     } else if (point_type == FXPT_TYPE::BezierTo) {
-      if (i > 0 && i + 2 < pPoints.size()) {
-        CFX_PointF pos0 = pPoints[i - 1].m_Point;
-        CFX_PointF pos2 = pPoints[i + 1].m_Point;
-        CFX_PointF pos3 = pPoints[i + 2].m_Point;
+      if (i > 0 && i + 2 < points.size()) {
+        CFX_PointF pos0 = points[i - 1].m_Point;
+        CFX_PointF pos2 = points[i + 1].m_Point;
+        CFX_PointF pos3 = points[i + 2].m_Point;
         if (pObject2Device) {
           pos0 = pObject2Device->Transform(pos0);
           pos2 = pObject2Device->Transform(pos2);
@@ -1125,7 +1125,7 @@
         m_PathData.add_path_curve(curve);
       }
     }
-    if (pPoints[i].m_CloseFigure)
+    if (points[i].m_CloseFigure)
       m_PathData.end_poly();
   }
 }
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index b1474c5..4c79891 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -513,10 +513,10 @@
                                          BlendMode blend_type) {
   uint8_t stroke_alpha = pGraphState ? FXARGB_A(stroke_color) : 0;
   uint8_t fill_alpha = (fill_mode & 3) ? FXARGB_A(fill_color) : 0;
-  const std::vector<FX_PATHPOINT>& pPoints = pPathData->GetPoints();
-  if (stroke_alpha == 0 && pPoints.size() == 2) {
-    CFX_PointF pos1 = pPoints[0].m_Point;
-    CFX_PointF pos2 = pPoints[1].m_Point;
+  const std::vector<FX_PATHPOINT>& points = pPathData->GetPoints();
+  if (stroke_alpha == 0 && points.size() == 2) {
+    CFX_PointF pos1 = points[0].m_Point;
+    CFX_PointF pos2 = points[1].m_Point;
     if (pObject2Device) {
       pos1 = pObject2Device->Transform(pos1);
       pos2 = pObject2Device->Transform(pos2);
@@ -525,7 +525,7 @@
     return true;
   }
 
-  if ((pPoints.size() == 5 || pPoints.size() == 4) && stroke_alpha == 0) {
+  if ((points.size() == 5 || points.size() == 4) && stroke_alpha == 0) {
     CFX_FloatRect rect_f;
     if (!(fill_mode & FXFILL_RECT_AA) &&
         pPathData->IsRect(pObject2Device, &rect_f)) {
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index b209ba4..5fbf481 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -312,26 +312,25 @@
 }
 
 SkPath BuildPath(const CFX_PathData* pPathData) {
-  SkPath skPath;
-  const CFX_PathData* pFPath = pPathData;
-  const std::vector<FX_PATHPOINT>& pPoints = pFPath->GetPoints();
-  for (size_t i = 0; i < pPoints.size(); i++) {
-    CFX_PointF point = pPoints[i].m_Point;
-    FXPT_TYPE point_type = pPoints[i].m_Type;
+  SkPath sk_path;
+  const std::vector<FX_PATHPOINT>& points = pPathData->GetPoints();
+  for (size_t i = 0; i < points.size(); ++i) {
+    const CFX_PointF& point = points[i].m_Point;
+    FXPT_TYPE point_type = points[i].m_Type;
     if (point_type == FXPT_TYPE::MoveTo) {
-      skPath.moveTo(point.x, point.y);
+      sk_path.moveTo(point.x, point.y);
     } else if (point_type == FXPT_TYPE::LineTo) {
-      skPath.lineTo(point.x, point.y);
+      sk_path.lineTo(point.x, point.y);
     } else if (point_type == FXPT_TYPE::BezierTo) {
-      CFX_PointF point2 = pPoints[i + 1].m_Point;
-      CFX_PointF point3 = pPoints[i + 2].m_Point;
-      skPath.cubicTo(point.x, point.y, point2.x, point2.y, point3.x, point3.y);
+      const CFX_PointF& point2 = points[i + 1].m_Point;
+      const CFX_PointF& point3 = points[i + 2].m_Point;
+      sk_path.cubicTo(point.x, point.y, point2.x, point2.y, point3.x, point3.y);
       i += 2;
     }
-    if (pPoints[i].m_CloseFigure)
-      skPath.close();
+    if (points[i].m_CloseFigure)
+      sk_path.close();
   }
-  return skPath;
+  return sk_path;
 }
 
 SkMatrix ToSkMatrix(const CFX_Matrix& m) {
diff --git a/core/fxge/win32/fx_win32_device.cpp b/core/fxge/win32/fx_win32_device.cpp
index 58cb504..11d5555 100644
--- a/core/fxge/win32/fx_win32_device.cpp
+++ b/core/fxge/win32/fx_win32_device.cpp
@@ -152,18 +152,18 @@
                  const CFX_Matrix* pMatrix) {
   BeginPath(hDC);
 
-  const std::vector<FX_PATHPOINT>& pPoints = pPathData->GetPoints();
-  for (size_t i = 0; i < pPoints.size(); i++) {
-    CFX_PointF pos = pPoints[i].m_Point;
+  const std::vector<FX_PATHPOINT>& points = pPathData->GetPoints();
+  for (size_t i = 0; i < points.size(); ++i) {
+    CFX_PointF pos = points[i].m_Point;
     if (pMatrix)
       pos = pMatrix->Transform(pos);
 
     CFX_Point screen(FXSYS_roundf(pos.x), FXSYS_roundf(pos.y));
-    FXPT_TYPE point_type = pPoints[i].m_Type;
+    FXPT_TYPE point_type = points[i].m_Type;
     if (point_type == FXPT_TYPE::MoveTo) {
       MoveToEx(hDC, screen.x, screen.y, nullptr);
     } else if (point_type == FXPT_TYPE::LineTo) {
-      if (pPoints[i].m_Point == pPoints[i - 1].m_Point)
+      if (points[i].m_Point == points[i - 1].m_Point)
         screen.x++;
 
       LineTo(hDC, screen.x, screen.y);
@@ -172,14 +172,14 @@
       lppt[0].x = screen.x;
       lppt[0].y = screen.y;
 
-      pos = pPoints[i + 1].m_Point;
+      pos = points[i + 1].m_Point;
       if (pMatrix)
         pos = pMatrix->Transform(pos);
 
       lppt[1].x = FXSYS_roundf(pos.x);
       lppt[1].y = FXSYS_roundf(pos.y);
 
-      pos = pPoints[i + 2].m_Point;
+      pos = points[i + 2].m_Point;
       if (pMatrix)
         pos = pMatrix->Transform(pos);
 
@@ -188,7 +188,7 @@
       PolyBezierTo(hDC, lppt, 3);
       i += 2;
     }
-    if (pPoints[i].m_CloseFigure)
+    if (points[i].m_CloseFigure)
       CloseFigure(hDC);
   }
   EndPath(hDC);
diff --git a/fpdfsdk/fpdf_transformpage.cpp b/fpdfsdk/fpdf_transformpage.cpp
index cc26888..bac805b 100644
--- a/fpdfsdk/fpdf_transformpage.cpp
+++ b/fpdfsdk/fpdf_transformpage.cpp
@@ -68,32 +68,31 @@
   if (!pPathData)
     return;
 
-  const std::vector<FX_PATHPOINT>& pPoints = pPathData->GetPoints();
+  const std::vector<FX_PATHPOINT>& points = pPathData->GetPoints();
   if (path.IsRect()) {
-    CFX_PointF diff = pPoints[2].m_Point - pPoints[0].m_Point;
-    buf << pPoints[0].m_Point.x << " " << pPoints[0].m_Point.y << " " << diff.x
+    CFX_PointF diff = points[2].m_Point - points[0].m_Point;
+    buf << points[0].m_Point.x << " " << points[0].m_Point.y << " " << diff.x
         << " " << diff.y << " re\n";
     return;
   }
 
-  ByteString temp;
-  for (size_t i = 0; i < pPoints.size(); i++) {
-    buf << pPoints[i].m_Point.x << " " << pPoints[i].m_Point.y;
-    FXPT_TYPE point_type = pPoints[i].m_Type;
+  for (size_t i = 0; i < points.size(); ++i) {
+    buf << points[i].m_Point.x << " " << points[i].m_Point.y;
+    FXPT_TYPE point_type = points[i].m_Type;
     if (point_type == FXPT_TYPE::MoveTo) {
       buf << " m\n";
     } else if (point_type == FXPT_TYPE::BezierTo) {
-      buf << " " << pPoints[i + 1].m_Point.x << " " << pPoints[i + 1].m_Point.y
-          << " " << pPoints[i + 2].m_Point.x << " " << pPoints[i + 2].m_Point.y;
+      buf << " " << points[i + 1].m_Point.x << " " << points[i + 1].m_Point.y
+          << " " << points[i + 2].m_Point.x << " " << points[i + 2].m_Point.y;
       buf << " c";
-      if (pPoints[i + 2].m_CloseFigure)
+      if (points[i + 2].m_CloseFigure)
         buf << " h";
       buf << "\n";
 
       i += 2;
     } else if (point_type == FXPT_TYPE::LineTo) {
       buf << " l";
-      if (pPoints[i].m_CloseFigure)
+      if (points[i].m_CloseFigure)
         buf << " h";
       buf << "\n";
     }
