From 74dfe6f971afad00af3ae04839eba2dce37b5739 Mon Sep 17 00:00:00 2001 From: Aviv Eyal Date: Fri, 28 Apr 2023 03:41:20 -0700 Subject: [PATCH] Fix is_absolute test in markup Summary: See Q59. Fixes rP935d7120ee32. Call sites should be happy to use PhutilURI when possible. Test Plan: visit any Repository page. Before - exception, now - data. Reviewers: O1 Blessed Committers!, valerio.bozzolan Reviewed By: valerio.bozzolan Subscribers: speck, tobiaswiese, valerio.bozzolan, Matthew, Cigaryno Differential Revision: https://we.phorge.it/D25139 --- src/infrastructure/javelin/markup.php | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/infrastructure/javelin/markup.php b/src/infrastructure/javelin/markup.php index 673869a4c5..8a040031cc 100644 --- a/src/infrastructure/javelin/markup.php +++ b/src/infrastructure/javelin/markup.php @@ -77,9 +77,27 @@ function phabricator_form(PhabricatorUser $user, $attributes, $content) { $is_post = (strcasecmp($http_method, 'POST') === 0); $http_action = idx($attributes, 'action'); - $is_absolute_uri = 0; - if (phutil_nonempty_string($http_action)) { + + if ($http_action === null) { + // Not sure what this is. + $is_absolute_uri = false; + + } else if ($http_action instanceof PhutilURI) { + // This is the happy path, I think + + // For now, this is close enough - I suspect we'll stay with "https" schema + // for the rest of eternity. + $protocol = $http_action->getProtocol(); + $is_absolute_uri = ($protocol == 'http' || $protocol == 'https'); + + } else if (is_string($http_action)) { + // Also good path? $is_absolute_uri = preg_match('#^(https?:|//)#', $http_action); + } else { + throw new Exception( + pht( + 'Unexpected object type provided as `action` - %s', + gettype($http_action))); } if ($is_post) {