diff --git a/src/applications/transactions/editfield/PhabricatorRemarkupEditField.php b/src/applications/transactions/editfield/PhabricatorRemarkupEditField.php index a299aa0b5c..a2e0debd39 100644 --- a/src/applications/transactions/editfield/PhabricatorRemarkupEditField.php +++ b/src/applications/transactions/editfield/PhabricatorRemarkupEditField.php @@ -29,6 +29,32 @@ final class PhabricatorRemarkupEditField return $value; } + public function getValueForDefaults() { + $value = parent::getValueForDefaults(); + + if ($value instanceof RemarkupValue) { + $value = $value->getCorpus(); + } + + return $value; + } + + protected function getDefaultValueFromConfiguration($value) { + + // See T13685. After changes to file attachment handling, the database + // was briefly poisoned with "array()" values as defaults. + + try { + $value = phutil_string_cast($value); + } catch (Exception $ex) { + $value = ''; + } catch (Throwable $ex) { + $value = ''; + } + + return $value; + } + public function getMetadata() { $defaults = array(); diff --git a/src/view/form/control/AphrontFormTextAreaControl.php b/src/view/form/control/AphrontFormTextAreaControl.php index 2665c6aaa7..e548916fbb 100644 --- a/src/view/form/control/AphrontFormTextAreaControl.php +++ b/src/view/form/control/AphrontFormTextAreaControl.php @@ -73,7 +73,7 @@ class AphrontFormTextAreaControl extends AphrontFormControl { // NOTE: This needs to be string cast, because if we pass `null` the // tag will be self-closed and some browsers aren't thrilled about that. - $value = (string)$this->getValue(); + $value = phutil_string_cast($this->getValue()); // NOTE: We also need to prefix the string with a newline, because browsers // ignore a newline immediately after a