This is an automated email from the ASF dual-hosted git repository.

cmcfarlen pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit cb1c8f33a013a1c4673ddbb6a83840dd63d64ad9
Author: Leif Hedstrom <[email protected]>
AuthorDate: Fri Sep 5 11:33:03 2025 -0600

    Cripts: Obscure issue where rri->requestUrl may be nullptr (#12477)
    
    (cherry picked from commit 4537a5873bb253795272c115f11edf1627931bb0)
---
 include/cripts/Context.hpp |  6 ++++++
 src/cripts/Urls.cc         | 29 ++++++++++++++++++-----------
 2 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/include/cripts/Context.hpp b/include/cripts/Context.hpp
index be2af90c39..6a7a691681 100644
--- a/include/cripts/Context.hpp
+++ b/include/cripts/Context.hpp
@@ -65,6 +65,12 @@ public:
   TSRemapRequestInfo                      *rri   = nullptr; // This may be 
nullptr, if not a remap
   cripts::Instance                        &p_instance;      // p_ == public_, 
since we can't use "instance"
 
+  bool
+  rriValid() const
+  {
+    return rri && rri->requestBufp && rri->requestHdrp && rri->requestUrl;
+  }
+
   // These are private, but needs to be visible to our friend classes that
   // depends on the Context.
   friend class Client::Request;
diff --git a/src/cripts/Urls.cc b/src/cripts/Urls.cc
index 94822baf62..fda6e8e838 100644
--- a/src/cripts/Urls.cc
+++ b/src/cripts/Urls.cc
@@ -466,11 +466,11 @@ Pristine::URL::_initialize()
 void
 Client::URL::_initialize()
 {
-  if (_context->rri) {
+  if (_context->rriValid()) {
+    super_type::_initialize();
     _bufp    = _context->rri->requestBufp;
     _hdr_loc = _context->rri->requestHdrp;
     _urlp    = _context->rri->requestUrl;
-    super_type::_initialize();
   } else {
     Client::Request &req = Client::Request::_get(_context); // Repurpose / 
create the shared request object
 
@@ -505,10 +505,14 @@ Client::URL::_update()
 void
 Remap::From::URL::_initialize()
 {
-  super_type::_initialize();
-  _bufp    = _context->rri->requestBufp;
-  _hdr_loc = _context->rri->requestHdrp;
-  _urlp    = _context->rri->mapFromUrl;
+  if (_context->rriValid()) {
+    super_type::_initialize();
+    _bufp    = _context->rri->requestBufp;
+    _hdr_loc = _context->rri->requestHdrp;
+    _urlp    = _context->rri->mapFromUrl;
+  } else {
+    _context->state.error.Fail();
+  }
 }
 
 Remap::From::URL &
@@ -521,11 +525,14 @@ Remap::From::URL::_get(cripts::Context *context)
 void
 Remap::To::URL::_initialize()
 {
-  super_type::_initialize();
-
-  _bufp    = _context->rri->requestBufp;
-  _hdr_loc = _context->rri->requestHdrp;
-  _urlp    = _context->rri->mapToUrl;
+  if (_context->rriValid()) {
+    super_type::_initialize();
+    _bufp    = _context->rri->requestBufp;
+    _hdr_loc = _context->rri->requestHdrp;
+    _urlp    = _context->rri->mapToUrl;
+  } else {
+    _context->state.error.Fail();
+  }
 }
 
 Remap::To::URL &

Reply via email to