diff --git a/fpdfsdk/cpdfsdk_actionhandler.cpp b/fpdfsdk/cpdfsdk_actionhandler.cpp
index bbca1bc..c3693ac 100644
--- a/fpdfsdk/cpdfsdk_actionhandler.cpp
+++ b/fpdfsdk/cpdfsdk_actionhandler.cpp
@@ -308,18 +308,15 @@
     const CPDF_Action& action,
     int modifiers) {
   DCHECK(action.GetDict());
-
-  ByteString sURI = action.GetURI(pFormFillEnv->GetPDFDocument());
-  pFormFillEnv->DoURIAction(sURI.c_str(), modifiers);
+  pFormFillEnv->DoURIAction(action.GetURI(pFormFillEnv->GetPDFDocument()),
+                            modifiers);
 }
 
 void CPDFSDK_ActionHandler::DoAction_Named(
     CPDFSDK_FormFillEnvironment* pFormFillEnv,
     const CPDF_Action& action) {
   DCHECK(action.GetDict());
-
-  ByteString csName = action.GetNamedAction();
-  pFormFillEnv->ExecuteNamedAction(csName.c_str());
+  pFormFillEnv->ExecuteNamedAction(action.GetNamedAction());
 }
 
 void CPDFSDK_ActionHandler::RunFieldJavaScript(
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index d166826..572e1fa 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -388,9 +388,10 @@
     m_pInfo->FFI_OnChange(m_pInfo);
 }
 
-void CPDFSDK_FormFillEnvironment::ExecuteNamedAction(const char* namedAction) {
+void CPDFSDK_FormFillEnvironment::ExecuteNamedAction(
+    const ByteString& namedAction) {
   if (m_pInfo && m_pInfo->FFI_ExecuteNamedAction)
-    m_pInfo->FFI_ExecuteNamedAction(m_pInfo, namedAction);
+    m_pInfo->FFI_ExecuteNamedAction(m_pInfo, namedAction.c_str());
 }
 
 void CPDFSDK_FormFillEnvironment::OnSetFieldInputFocus(
@@ -401,18 +402,19 @@
     m_pInfo->FFI_SetTextFieldFocus(m_pInfo, focusText, nTextLen, bFocus);
 }
 
-void CPDFSDK_FormFillEnvironment::DoURIAction(const char* bsURI,
+void CPDFSDK_FormFillEnvironment::DoURIAction(const ByteString& bsURI,
                                               uint32_t modifiers) {
   if (!m_pInfo)
     return;
 
   if (m_pInfo->version >= 2 && m_pInfo->FFI_DoURIActionWithKeyboardModifier) {
-    m_pInfo->FFI_DoURIActionWithKeyboardModifier(m_pInfo, bsURI, modifiers);
+    m_pInfo->FFI_DoURIActionWithKeyboardModifier(m_pInfo, bsURI.c_str(),
+                                                 modifiers);
     return;
   }
 
   if (m_pInfo->FFI_DoURIAction)
-    m_pInfo->FFI_DoURIAction(m_pInfo, bsURI);
+    m_pInfo->FFI_DoURIAction(m_pInfo, bsURI.c_str());
 }
 
 void CPDFSDK_FormFillEnvironment::DoGoToAction(int nPageIndex,
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index d713eed..bedbc37 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -92,11 +92,11 @@
   void Invalidate(IPDF_Page* page, const FX_RECT& rect);
 
   void OnChange();
-  void ExecuteNamedAction(const char* namedAction);
+  void ExecuteNamedAction(const ByteString& namedAction);
   void OnSetFieldInputFocus(FPDF_WIDESTRING focusText,
                             FPDF_DWORD nTextLen,
                             bool bFocus);
-  void DoURIAction(const char* bsURI, uint32_t modifiers);
+  void DoURIAction(const ByteString& bsURI, uint32_t modifiers);
   void DoGoToAction(int nPageIndex,
                     int zoomMode,
                     float* fPosArray,
