diff --git a/core/fpdfapi/fpdf_font/cpdf_cidfont.cpp b/core/fpdfapi/fpdf_font/cpdf_cidfont.cpp
index b80ac5e..8de2c98 100644
--- a/core/fpdfapi/fpdf_font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/fpdf_font/cpdf_cidfont.cpp
@@ -491,7 +491,7 @@
                         CIDTransformToFloat(pTransform[5]) * 1000);
       CFX_FloatRect rect_f(rect);
       rect_f.Transform(&matrix);
-      rect = rect_f.GetOutterRect();
+      rect = rect_f.GetOuterRect();
     }
   }
   if (charcode < 256)
diff --git a/core/fpdfapi/fpdf_page/cpdf_pageobject.cpp b/core/fpdfapi/fpdf_page/cpdf_pageobject.cpp
index ebac18a..31d3823 100644
--- a/core/fpdfapi/fpdf_page/cpdf_pageobject.cpp
+++ b/core/fpdfapi/fpdf_page/cpdf_pageobject.cpp
@@ -99,5 +99,5 @@
   if (pMatrix) {
     pMatrix->TransformRect(rect);
   }
-  return rect.GetOutterRect();
+  return rect.GetOuterRect();
 }
diff --git a/core/fpdfapi/fpdf_render/fpdf_render.cpp b/core/fpdfapi/fpdf_render/fpdf_render.cpp
index 86bc3aa..350aa32 100644
--- a/core/fpdfapi/fpdf_render/fpdf_render.cpp
+++ b/core/fpdfapi/fpdf_render/fpdf_render.cpp
@@ -1203,7 +1203,7 @@
   m_Matrix.Concat(fScaleX, 0, 0, fScaleY, 0, 0);
   CFX_FloatRect rect(*pRect);
   m_Matrix.TransformRect(rect);
-  FX_RECT bitmap_rect = rect.GetOutterRect();
+  FX_RECT bitmap_rect = rect.GetOuterRect();
   m_pBitmap.reset(new CFX_DIBitmap);
   m_pBitmap->Create(bitmap_rect.Width(), bitmap_rect.Height(), FXDIB_Argb);
   return TRUE;
@@ -1271,7 +1271,7 @@
   while (1) {
     CFX_FloatRect rect(pRect);
     m_Matrix.TransformRect(rect);
-    FX_RECT bitmap_rect = rect.GetOutterRect();
+    FX_RECT bitmap_rect = rect.GetOuterRect();
     int32_t iWidth = bitmap_rect.Width();
     int32_t iHeight = bitmap_rect.Height();
     int32_t iPitch = (iWidth * bpp + 31) / 32 * 4;
diff --git a/core/fpdfapi/fpdf_render/fpdf_render_image.cpp b/core/fpdfapi/fpdf_render/fpdf_render_image.cpp
index ce58dd9..e3dc7d8 100644
--- a/core/fpdfapi/fpdf_render/fpdf_render_image.cpp
+++ b/core/fpdfapi/fpdf_render/fpdf_render_image.cpp
@@ -365,7 +365,7 @@
 
 FX_BOOL CPDF_ImageRenderer::StartLoadDIBSource() {
   CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
-  FX_RECT image_rect = image_rect_f.GetOutterRect();
+  FX_RECT image_rect = image_rect_f.GetOuterRect();
   int dest_width = image_rect.Width();
   int dest_height = image_rect.Height();
   if (m_ImageMatrix.a < 0) {
@@ -552,7 +552,7 @@
     m_Result = FALSE;
     return FALSE;
   }
-  FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOutterRect();
+  FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOuterRect();
   rect.Intersect(m_pRenderStatus->m_pDevice->GetClipBox());
   if (rect.IsEmpty()) {
     return FALSE;
@@ -652,7 +652,7 @@
     m_Result = FALSE;
     return FALSE;
   }
-  FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOutterRect();
+  FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOuterRect();
   rect.Intersect(m_pRenderStatus->m_pDevice->GetClipBox());
   if (rect.IsEmpty()) {
     return FALSE;
@@ -778,7 +778,7 @@
   }
 #endif
   CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
-  FX_RECT image_rect = image_rect_f.GetOutterRect();
+  FX_RECT image_rect = image_rect_f.GetOuterRect();
   int dest_width = image_rect.Width();
   int dest_height = image_rect.Height();
   if ((FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) ||
@@ -868,7 +868,7 @@
           ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha));
     } else {
       CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
-      FX_RECT image_rect = image_rect_f.GetOutterRect();
+      FX_RECT image_rect = image_rect_f.GetOuterRect();
       int dest_width =
           m_ImageMatrix.a > 0 ? image_rect.Width() : -image_rect.Width();
       int dest_height =
diff --git a/core/fpdfapi/fpdf_render/fpdf_render_pattern.cpp b/core/fpdfapi/fpdf_render/fpdf_render_pattern.cpp
index d9a93dc..4653dd3 100644
--- a/core/fpdfapi/fpdf_render/fpdf_render_pattern.cpp
+++ b/core/fpdfapi/fpdf_render/fpdf_render_pattern.cpp
@@ -868,7 +868,7 @@
   if (pDict->KeyExist("BBox")) {
     CFX_FloatRect rect = pDict->GetRectBy("BBox");
     rect.Transform(pMatrix);
-    clip_rect.Intersect(rect.GetOutterRect());
+    clip_rect.Intersect(rect.GetOuterRect());
   }
   if (m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SHADING &&
       m_pDevice->GetDeviceDriver()->DrawShading(pPattern, pMatrix, clip_rect,
diff --git a/core/fpdfapi/fpdf_render/fpdf_render_text.cpp b/core/fpdfapi/fpdf_render/fpdf_render_text.cpp
index a64bc89..728521a 100644
--- a/core/fpdfapi/fpdf_render/fpdf_render_text.cpp
+++ b/core/fpdfapi/fpdf_render/fpdf_render_text.cpp
@@ -446,7 +446,7 @@
       } else {
         CFX_FloatRect rect_f = pType3Char->m_pForm->CalcBoundingBox();
         rect_f.Transform(&matrix);
-        FX_RECT rect = rect_f.GetOutterRect();
+        FX_RECT rect = rect_f.GetOuterRect();
         CFX_FxgeDevice bitmap_device;
         if (!bitmap_device.Create((int)(rect.Width() * sa),
                                   (int)(rect.Height() * sd), FXDIB_Argb,
diff --git a/core/fpdfdoc/cpdf_annotlist.cpp b/core/fpdfdoc/cpdf_annotlist.cpp
index 1e0e99b..6a86d55 100644
--- a/core/fpdfdoc/cpdf_annotlist.cpp
+++ b/core/fpdfdoc/cpdf_annotlist.cpp
@@ -88,7 +88,7 @@
     CFX_Matrix matrix = *pMatrix;
     if (clip_rect) {
       annot_rect_f.Transform(&matrix);
-      FX_RECT annot_rect = annot_rect_f.GetOutterRect();
+      FX_RECT annot_rect = annot_rect_f.GetOuterRect();
       annot_rect.Intersect(*clip_rect);
       if (annot_rect.IsEmpty()) {
         continue;
diff --git a/core/fxcrt/fx_basic_coords.cpp b/core/fxcrt/fx_basic_coords.cpp
index 4c5dc55..893a99a 100644
--- a/core/fxcrt/fx_basic_coords.cpp
+++ b/core/fxcrt/fx_basic_coords.cpp
@@ -150,7 +150,7 @@
   }
   return nRects;
 }
-FX_RECT CFX_FloatRect::GetOutterRect() const {
+FX_RECT CFX_FloatRect::GetOuterRect() const {
   CFX_FloatRect rect1 = *this;
   FX_RECT rect;
   rect.left = (int)FXSYS_floor(rect1.left);
diff --git a/core/fxcrt/include/fx_coordinates.h b/core/fxcrt/include/fx_coordinates.h
index ce97f6f..e9c05ec 100644
--- a/core/fxcrt/include/fx_coordinates.h
+++ b/core/fxcrt/include/fx_coordinates.h
@@ -237,7 +237,7 @@
   void Union(const CFX_FloatRect& other_rect);
 
   FX_RECT GetInnerRect() const;
-  FX_RECT GetOutterRect() const;
+  FX_RECT GetOuterRect() const;
   FX_RECT GetClosestRect() const;
 
   int Substract4(CFX_FloatRect& substract_rect, CFX_FloatRect* pRects);
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index ea12896..80cde93 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -559,7 +559,7 @@
       rectf.Intersect(
           CFX_FloatRect(0, 0, (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_WIDTH),
                         (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
-      FX_RECT rect = rectf.GetOutterRect();
+      FX_RECT rect = rectf.GetOuterRect();
       m_pClipRgn->IntersectRect(rect);
       return TRUE;
     }
diff --git a/core/fxge/dib/fx_dib_main.cpp b/core/fxge/dib/fx_dib_main.cpp
index 8656d54..5c13c1d 100644
--- a/core/fxge/dib/fx_dib_main.cpp
+++ b/core/fxge/dib/fx_dib_main.cpp
@@ -1536,7 +1536,7 @@
                                  int blend_type) {
   m_Matrix = *pMatrix;
   CFX_FloatRect image_rect_f = m_Matrix.GetUnitRect();
-  FX_RECT image_rect = image_rect_f.GetOutterRect();
+  FX_RECT image_rect = image_rect_f.GetOuterRect();
   m_ClipBox = pClipRgn ? pClipRgn->GetBox() : FX_RECT(0, 0, pDevice->GetWidth(),
                                                       pDevice->GetHeight());
   m_ClipBox.Intersect(image_rect);
diff --git a/core/fxge/dib/fx_dib_transform.cpp b/core/fxge/dib/fx_dib_transform.cpp
index d997a8f..73b02be 100644
--- a/core/fxge/dib/fx_dib_transform.cpp
+++ b/core/fxge/dib/fx_dib_transform.cpp
@@ -393,7 +393,7 @@
   m_dest2stretch.SetReverse(stretch2dest);
   CFX_FloatRect clip_rect_f(result_clip);
   clip_rect_f.Transform(&m_dest2stretch);
-  m_StretchClip = clip_rect_f.GetOutterRect();
+  m_StretchClip = clip_rect_f.GetOuterRect();
   m_StretchClip.Intersect(0, 0, stretch_width, stretch_height);
   m_Stretcher.reset(new CFX_ImageStretcher(&m_Storer, m_pSrc, stretch_width,
                                            stretch_height, m_StretchClip,
diff --git a/core/fxge/ge/fx_ge_device.cpp b/core/fxge/ge/fx_ge_device.cpp
index 7cf11e7..1b4d9c8 100644
--- a/core/fxge/ge/fx_ge_device.cpp
+++ b/core/fxge/ge/fx_ge_device.cpp
@@ -169,7 +169,7 @@
     CFX_FloatRect rect_f;
     if (!(fill_mode & FXFILL_RECT_AA) &&
         pPathData->IsRect(pObject2Device, &rect_f)) {
-      FX_RECT rect_i = rect_f.GetOutterRect();
+      FX_RECT rect_i = rect_f.GetOuterRect();
 
       // Depending on the top/bottom, left/right values of the rect it's
       // possible to overflow the Width() and Height() calculations. Check that
@@ -276,7 +276,7 @@
     CFX_Matrix ctm = GetCTM();
     FX_FLOAT fScaleX = FXSYS_fabs(ctm.a);
     FX_FLOAT fScaleY = FXSYS_fabs(ctm.d);
-    FX_RECT rect = bbox.GetOutterRect();
+    FX_RECT rect = bbox.GetOuterRect();
     CFX_DIBitmap bitmap, Backdrop;
     if (!CreateCompatibleBitmap(&bitmap, FXSYS_round(rect.Width() * fScaleX),
                                 FXSYS_round(rect.Height() * fScaleY))) {
diff --git a/core/fxge/win32/fx_win32_device.cpp b/core/fxge/win32/fx_win32_device.cpp
index a0309b0..059a4c0 100644
--- a/core/fxge/win32/fx_win32_device.cpp
+++ b/core/fxge/win32/fx_win32_device.cpp
@@ -1118,7 +1118,7 @@
   if (pPathData->GetPointCount() == 5) {
     CFX_FloatRect rectf;
     if (pPathData->IsRect(pMatrix, &rectf)) {
-      FX_RECT rect = rectf.GetOutterRect();
+      FX_RECT rect = rectf.GetOuterRect();
       IntersectClipRect(m_hDC, rect.left, rect.top, rect.right, rect.bottom);
       return TRUE;
     }
diff --git a/core/fxge/win32/fx_win32_print.cpp b/core/fxge/win32/fx_win32_print.cpp
index c78546a..eea91ba 100644
--- a/core/fxge/win32/fx_win32_print.cpp
+++ b/core/fxge/win32/fx_win32_print.cpp
@@ -169,7 +169,7 @@
     return FALSE;
   }
   CFX_FloatRect unit_rect = pMatrix->GetUnitRect();
-  FX_RECT full_rect = unit_rect.GetOutterRect();
+  FX_RECT full_rect = unit_rect.GetOuterRect();
   if (FXSYS_fabs(pMatrix->b) < 0.5f && pMatrix->a != 0 &&
       FXSYS_fabs(pMatrix->c) < 0.5f && pMatrix->d != 0) {
     FX_BOOL bFlipX = pMatrix->a < 0;
diff --git a/fpdfsdk/formfiller/cffl_formfiller.cpp b/fpdfsdk/formfiller/cffl_formfiller.cpp
index 479a1bc..b1c11af 100644
--- a/fpdfsdk/formfiller/cffl_formfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_formfiller.cpp
@@ -71,7 +71,7 @@
 
   CFX_FloatRect rect = CPWL_Utils::InflateRect(rcWin, 1);
 
-  return rect.GetOutterRect();
+  return rect.GetOuterRect();
 }
 
 void CFFL_FormFiller::OnDraw(CPDFSDK_PageView* pPageView,
diff --git a/fpdfsdk/formfiller/cffl_iformfiller.cpp b/fpdfsdk/formfiller/cffl_iformfiller.cpp
index 55907aa..a73f543 100644
--- a/fpdfsdk/formfiller/cffl_iformfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_iformfiller.cpp
@@ -46,7 +46,7 @@
   pPDFAnnot->GetRect(rcAnnot);
 
   CFX_FloatRect rcWin = CPWL_Utils::InflateRect(rcAnnot, 1);
-  return rcWin.GetOutterRect();
+  return rcWin.GetOuterRect();
 }
 
 void CFFL_IFormFiller::OnDraw(CPDFSDK_PageView* pPageView,
diff --git a/xfa/fxbarcode/oned/BC_OneDimWriter.cpp b/xfa/fxbarcode/oned/BC_OneDimWriter.cpp
index 8ba7d8e..ea2f3f9 100644
--- a/xfa/fxbarcode/oned/BC_OneDimWriter.cpp
+++ b/xfa/fxbarcode/oned/BC_OneDimWriter.cpp
@@ -199,7 +199,7 @@
     rect.right -= 1;
   }
   matrix->TransformRect(rect);
-  FX_RECT re = rect.GetOutterRect();
+  FX_RECT re = rect.GetOuterRect();
   device->FillRect(&re, m_backgroundColor);
   CFX_Matrix affine_matrix(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)locX,
                            (FX_FLOAT)(locY + iFontSize));
diff --git a/xfa/fxbarcode/oned/BC_OnedEAN13Writer.cpp b/xfa/fxbarcode/oned/BC_OnedEAN13Writer.cpp
index 94cec3e..f4b0a6f 100644
--- a/xfa/fxbarcode/oned/BC_OnedEAN13Writer.cpp
+++ b/xfa/fxbarcode/oned/BC_OnedEAN13Writer.cpp
@@ -196,7 +196,7 @@
         (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height);
     matr.Concat(*matrix);
     matr.TransformRect(rect);
-    FX_RECT re = rect.GetOutterRect();
+    FX_RECT re = rect.GetOuterRect();
     device->FillRect(&re, m_backgroundColor);
     CFX_FloatRect rect1(
         (FX_FLOAT)(leftPosition + 47 * multiple),
@@ -206,7 +206,7 @@
     CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
     matr1.Concat(*matrix);
     matr1.TransformRect(rect1);
-    re = rect1.GetOutterRect();
+    re = rect1.GetOuterRect();
     device->FillRect(&re, m_backgroundColor);
     int32_t strWidth1 = multiple * 7;
     CFX_Matrix matr2(m_outputHScale, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
@@ -214,7 +214,7 @@
                         (FX_FLOAT)strWidth1 - 0.5f, (FX_FLOAT)m_Height);
     matr2.Concat(*matrix);
     matr2.TransformRect(rect2);
-    re = rect2.GetOutterRect();
+    re = rect2.GetOuterRect();
     device->FillRect(&re, m_backgroundColor);
   }
   FX_FLOAT blank = 0.0;
diff --git a/xfa/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/xfa/fxbarcode/oned/BC_OnedEAN8Writer.cpp
index 75693ff..577654b 100644
--- a/xfa/fxbarcode/oned/BC_OnedEAN8Writer.cpp
+++ b/xfa/fxbarcode/oned/BC_OnedEAN8Writer.cpp
@@ -197,7 +197,7 @@
         (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height);
     matr.Concat(*matrix);
     matr.TransformRect(rect);
-    FX_RECT re = rect.GetOutterRect();
+    FX_RECT re = rect.GetOuterRect();
     device->FillRect(&re, m_backgroundColor);
     CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
     CFX_FloatRect rect1(
@@ -207,7 +207,7 @@
         (FX_FLOAT)m_Height);
     matr1.Concat(*matrix);
     matr1.TransformRect(rect1);
-    re = rect1.GetOutterRect();
+    re = rect1.GetOuterRect();
     device->FillRect(&re, m_backgroundColor);
   }
   if (!pOutBitmap)
diff --git a/xfa/fxbarcode/oned/BC_OnedUPCAWriter.cpp b/xfa/fxbarcode/oned/BC_OnedUPCAWriter.cpp
index 158af2c..8ed5971 100644
--- a/xfa/fxbarcode/oned/BC_OnedUPCAWriter.cpp
+++ b/xfa/fxbarcode/oned/BC_OnedUPCAWriter.cpp
@@ -147,7 +147,7 @@
         (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height);
     matr.Concat(*matrix);
     matr.TransformRect(rect);
-    FX_RECT re = rect.GetOutterRect();
+    FX_RECT re = rect.GetOuterRect();
     device->FillRect(&re, m_backgroundColor);
     CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
     CFX_FloatRect rect1(
@@ -157,7 +157,7 @@
         (FX_FLOAT)m_Height);
     matr1.Concat(*matrix);
     matr1.TransformRect(rect1);
-    re = rect1.GetOutterRect();
+    re = rect1.GetOuterRect();
     device->FillRect(&re, m_backgroundColor);
     FX_FLOAT strWidth1 = (FX_FLOAT)multiple * 7;
     CFX_Matrix matr2(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
@@ -165,7 +165,7 @@
                         (FX_FLOAT)strWidth1 - 1, (FX_FLOAT)m_Height);
     matr2.Concat(*matrix);
     matr2.TransformRect(rect2);
-    re = rect2.GetOutterRect();
+    re = rect2.GetOuterRect();
     device->FillRect(&re, m_backgroundColor);
     CFX_Matrix matr3(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
     CFX_FloatRect rect3(
@@ -175,7 +175,7 @@
         (FX_FLOAT)m_Height);
     matr3.Concat(*matrix);
     matr3.TransformRect(rect3);
-    re = rect3.GetOutterRect();
+    re = rect3.GetOuterRect();
     device->FillRect(&re, m_backgroundColor);
   }
   if (!pOutBitmap)
diff --git a/xfa/fxfa/app/xfa_ffwidget.cpp b/xfa/fxfa/app/xfa_ffwidget.cpp
index 6cea803..f4b6a8a 100644
--- a/xfa/fxfa/app/xfa_ffwidget.cpp
+++ b/xfa/fxfa/app/xfa_ffwidget.cpp
@@ -633,7 +633,7 @@
     return FALSE;
   }
   CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
-  FX_RECT image_rect = image_rect_f.GetOutterRect();
+  FX_RECT image_rect = image_rect_f.GetOuterRect();
   int dest_width = image_rect.Width();
   int dest_height = image_rect.Height();
   if ((FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) ||
