diff --git a/src/view/phui/PHUIObjectItemView.php b/src/view/phui/PHUIObjectItemView.php --- a/src/view/phui/PHUIObjectItemView.php +++ b/src/view/phui/PHUIObjectItemView.php @@ -83,11 +83,33 @@ return $this->object; } + /** + * Set the href attribute + * + * @param string|PhutilURI|null $href + * @return self + */ public function setHref($href) { + + // We have not a very clear idea about what this method should receive + // We suspect that PhutilURI should be allowed... but let's log stuff! + // https://we.phorge.it/T15316 + try { + self::assertValidHref($href, 'href'); + } catch (Exception $ex) { + phlog($ex); + } + $this->href = $href; return $this; } + /** + * Get the href attribute + * + * @see PHUIObjectItemView::setHref() + * @return string|PhutilURI|null + */ public function getHref() { return $this->href; } @@ -136,7 +158,23 @@ return $this; } + /** + * Set the image href attribute + * + * @param string|PhutilURI|null $image_href + * @return self + */ public function setImageHref($image_href) { + + // We have not a very clear idea about what this method should receive + // We suspect that PhutilURI should be allowed... but let's log stuff! + // https://we.phorge.it/T15316 + try { + self::assertValidHref($image_href, 'image_href'); + } catch (Exception $ex) { + phlog($ex); + } + $this->imageHref = $image_href; return $this; } @@ -659,8 +697,8 @@ $this->getImageIcon()); } - if ($image && (phutil_nonempty_string($this->href) || - phutil_nonempty_string($this->imageHref))) { + if ($image && (phutil_nonempty_stringlike($this->href) || + phutil_nonempty_stringlike($this->imageHref))) { $image_href = ($this->imageHref) ? $this->imageHref : $this->href; $image = phutil_tag( 'a', @@ -899,4 +937,30 @@ return javelin_tag('span', $options, ''); } + + /** + * Receive a href attribute and check if it has expected values + * + * TODO: Feel free to remove after 2023, if no more new reports arrive. + * + * https://we.phorge.it/T15316 + * + * @param mixed $href + * @param string $variable_name + */ + private static function assertValidHref($href, $variable_name) { + + // We have not a very clear idea about what this method should receive + // We suspect that PhutilURI should be allowed... but let's log stuff! + if (is_object($href) && !($href instanceof PhutilURI)) { + + throw new Exception(pht( + 'The variable %s received an unexpected type: %s. '. + 'Please share this stack trace as comment in Task %s', + $variable_name, + get_class($href), + 'https://we.phorge.it/T15316')); + } + } + }