diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp
index 76d3f9c..e70ee27 100644
--- a/core/fpdfdoc/cpdf_annot.cpp
+++ b/core/fpdfdoc/cpdf_annot.cpp
@@ -55,12 +55,13 @@
   return m_sSubtype;
 }
 
-void CPDF_Annot::GetRect(CFX_FloatRect& rect) const {
-  if (!m_pAnnotDict) {
-    return;
-  }
-  rect = m_pAnnotDict->GetRectBy("Rect");
+CFX_FloatRect CPDF_Annot::GetRect() const {
+  if (!m_pAnnotDict)
+    return CFX_FloatRect();
+
+  CFX_FloatRect rect = m_pAnnotDict->GetRectBy("Rect");
   rect.Normalize();
+  return rect;
 }
 
 uint32_t CPDF_Annot::GetFlags() const {
@@ -133,9 +134,7 @@
   CFX_FloatRect form_bbox = pForm->m_pFormDict->GetRectBy("BBox");
   CFX_Matrix form_matrix = pForm->m_pFormDict->GetMatrixBy("Matrix");
   form_matrix.TransformRect(form_bbox);
-  CFX_FloatRect arect;
-  pAnnot->GetRect(arect);
-  matrix.MatchRect(arect, form_bbox);
+  matrix.MatchRect(pAnnot->GetRect(), form_bbox);
   matrix.Concat(*pUser2Device);
   return pForm;
 }
@@ -272,8 +271,7 @@
       graph_state.m_DashArray[0] = graph_state.m_DashArray[1] = 3 * 1.0f;
     }
   }
-  CFX_FloatRect rect;
-  GetRect(rect);
+  CFX_FloatRect rect = GetRect();
   CFX_PathData path;
   width /= 2;
   path.AppendRect(rect.left + width, rect.bottom + width, rect.right - width,
diff --git a/core/fpdfdoc/cpdf_annotlist.cpp b/core/fpdfdoc/cpdf_annotlist.cpp
index 9dc0e95..153b25f 100644
--- a/core/fpdfdoc/cpdf_annotlist.cpp
+++ b/core/fpdfdoc/cpdf_annotlist.cpp
@@ -84,8 +84,7 @@
         continue;
       }
     }
-    CFX_FloatRect annot_rect_f;
-    pAnnot->GetRect(annot_rect_f);
+    CFX_FloatRect annot_rect_f = pAnnot->GetRect();
     CFX_Matrix matrix = *pMatrix;
     if (clip_rect) {
       annot_rect_f.Transform(&matrix);
diff --git a/core/fpdfdoc/include/cpdf_annot.h b/core/fpdfdoc/include/cpdf_annot.h
index 4029bba..9f86716 100644
--- a/core/fpdfdoc/include/cpdf_annot.h
+++ b/core/fpdfdoc/include/cpdf_annot.h
@@ -44,7 +44,7 @@
 
   CFX_ByteString GetSubType() const;
   uint32_t GetFlags() const;
-  void GetRect(CFX_FloatRect& rect) const;
+  CFX_FloatRect GetRect() const;
   const CPDF_Dictionary* GetAnnotDict() const { return m_pAnnotDict; }
   CPDF_Dictionary* GetAnnotDict() { return m_pAnnotDict; }
   FX_BOOL DrawAppearance(CPDF_Page* pPage,
diff --git a/fpdfsdk/cba_annotiterator.cpp b/fpdfsdk/cba_annotiterator.cpp
index f07805e..bd68997 100644
--- a/fpdfsdk/cba_annotiterator.cpp
+++ b/fpdfsdk/cba_annotiterator.cpp
@@ -168,7 +168,5 @@
 }
 
 CFX_FloatRect CBA_AnnotIterator::GetAnnotRect(const CPDFSDK_Annot* pAnnot) {
-  CFX_FloatRect rcAnnot;
-  pAnnot->GetPDFAnnot()->GetRect(rcAnnot);
-  return rcAnnot;
+  return pAnnot->GetPDFAnnot()->GetRect();
 }
diff --git a/fpdfsdk/cpdfsdk_baannot.cpp b/fpdfsdk/cpdfsdk_baannot.cpp
index 6a4ba86..99dd2e0 100644
--- a/fpdfsdk/cpdfsdk_baannot.cpp
+++ b/fpdfsdk/cpdfsdk_baannot.cpp
@@ -35,9 +35,7 @@
 }
 
 CFX_FloatRect CPDFSDK_BAAnnot::GetRect() const {
-  CFX_FloatRect rect;
-  m_pAnnot->GetRect(rect);
-  return rect;
+  return m_pAnnot->GetRect();
 }
 
 CFX_ByteString CPDFSDK_BAAnnot::GetType() const {
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index a36014c..dcccf0c 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -1975,8 +1975,7 @@
 
 FX_BOOL CPDFSDK_Widget::HitTest(FX_FLOAT pageX, FX_FLOAT pageY) {
   CPDF_Annot* pAnnot = GetPDFAnnot();
-  CFX_FloatRect annotRect;
-  pAnnot->GetRect(annotRect);
+  CFX_FloatRect annotRect = pAnnot->GetRect();
   if (!annotRect.Contains(pageX, pageY))
     return FALSE;
 
diff --git a/fpdfsdk/formfiller/cffl_formfiller.cpp b/fpdfsdk/formfiller/cffl_formfiller.cpp
index 92e9282..0779f26 100644
--- a/fpdfsdk/formfiller/cffl_formfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_formfiller.cpp
@@ -419,8 +419,7 @@
 CFX_Matrix CFFL_FormFiller::GetCurMatrix() {
   CFX_Matrix mt;
 
-  CFX_FloatRect rcDA;
-  m_pWidget->GetPDFAnnot()->GetRect(rcDA);
+  CFX_FloatRect rcDA = m_pWidget->GetPDFAnnot()->GetRect();
 
   switch (m_pWidget->GetRotate()) {
     default:
@@ -451,8 +450,7 @@
 }
 
 CFX_FloatRect CFFL_FormFiller::GetPDFWindowRect() const {
-  CFX_FloatRect rectAnnot;
-  m_pWidget->GetPDFAnnot()->GetRect(rectAnnot);
+  CFX_FloatRect rectAnnot = m_pWidget->GetPDFAnnot()->GetRect();
 
   FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left;
   FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom;
diff --git a/fpdfsdk/formfiller/cffl_iformfiller.cpp b/fpdfsdk/formfiller/cffl_iformfiller.cpp
index 9e252cb..1f63844 100644
--- a/fpdfsdk/formfiller/cffl_iformfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_iformfiller.cpp
@@ -45,10 +45,7 @@
   ASSERT(pPageView);
 
   CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
-  CFX_FloatRect rcAnnot;
-  pPDFAnnot->GetRect(rcAnnot);
-
-  CFX_FloatRect rcWin = CPWL_Utils::InflateRect(rcAnnot, 1);
+  CFX_FloatRect rcWin = CPWL_Utils::InflateRect(pPDFAnnot->GetRect(), 1);
   return rcWin.GetOuterRect();
 }
 
diff --git a/fpdfsdk/fpdfeditpage.cpp b/fpdfsdk/fpdfeditpage.cpp
index 0daa459..1301018 100644
--- a/fpdfsdk/fpdfeditpage.cpp
+++ b/fpdfsdk/fpdfeditpage.cpp
@@ -295,8 +295,7 @@
   for (size_t i = 0; i < AnnotList.Count(); ++i) {
     CPDF_Annot* pAnnot = AnnotList.GetAt(i);
     // transformAnnots Rectangle
-    CFX_FloatRect rect;
-    pAnnot->GetRect(rect);
+    CFX_FloatRect rect = pAnnot->GetRect();
     CFX_Matrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d,
                       (FX_FLOAT)e, (FX_FLOAT)f);
     rect.Transform(&matrix);
diff --git a/fpdfsdk/fsdk_mgr.cpp b/fpdfsdk/fsdk_mgr.cpp
index 24efd40..9017e20 100644
--- a/fpdfsdk/fsdk_mgr.cpp
+++ b/fpdfsdk/fsdk_mgr.cpp
@@ -576,8 +576,7 @@
 const CPDF_Annot* CPDFSDK_PageView::GetPDFAnnotAtPoint(FX_FLOAT pageX,
                                                        FX_FLOAT pageY) {
   for (const auto& pAnnot : m_pAnnotList->All()) {
-    CFX_FloatRect annotRect;
-    pAnnot->GetRect(annotRect);
+    CFX_FloatRect annotRect = pAnnot->GetRect();
     if (annotRect.Contains(pageX, pageY))
       return pAnnot.get();
   }
@@ -588,8 +587,7 @@
                                                         FX_FLOAT pageY) {
   for (const auto& pAnnot : m_pAnnotList->All()) {
     if (pAnnot->GetSubType() == "Widget") {
-      CFX_FloatRect annotRect;
-      pAnnot->GetRect(annotRect);
+      CFX_FloatRect annotRect = pAnnot->GetRect();
       if (annotRect.Contains(pageX, pageY))
         return pAnnot.get();
     }
