Index: src/applications/differential/field/specification/DifferentialUnitFieldSpecification.php =================================================================== --- src/applications/differential/field/specification/DifferentialUnitFieldSpecification.php +++ src/applications/differential/field/specification/DifferentialUnitFieldSpecification.php @@ -70,8 +70,24 @@ $udata[$key]['sort'] = idx($sort_map, idx($test, 'result')); } $udata = isort($udata, 'sort'); - - foreach ($udata as $test) { + $engine = new PhabricatorMarkupEngine(); + $engine->setViewer($this->getUser()); + $markup_objects = array(); + foreach ($udata as $key => $test) { + $userdata = idx($test, 'userdata'); + if ($userdata) { + if ($userdata !== false) { + $userdata = str_replace("\000", '', $userdata); + } + $markup_object = id(new PhabricatorMarkupOneOff()) + ->setContent($userdata) + ->setPreserveLinebreaks(true); + $engine->addObject($markup_object, 'default'); + $markup_objects[$key] = $markup_object; + } + } + $engine->process(); + foreach ($udata as $key => $test) { $result = idx($test, 'result'); $default_hide = false; @@ -110,17 +126,10 @@ 'show' => $show, ); - $userdata = idx($test, 'userdata'); - if ($userdata) { - if ($userdata !== false) { - $userdata = str_replace("\000", '', $userdata); - } - $engine = PhabricatorMarkupEngine::newDifferentialMarkupEngine(); - $engine->setConfig('viewer', $this->getUser()); - $userdata = $engine->markupText($userdata); + if (isset($markup_objects[$key])) { $rows[] = array( 'style' => 'details', - 'value' => $userdata, + 'value' => $engine->getOutput($markup_objects[$key], 'default'), 'show' => false, ); if (empty($hidden['details'])) { Index: src/infrastructure/markup/PhabricatorMarkupEngine.php =================================================================== --- src/infrastructure/markup/PhabricatorMarkupEngine.php +++ src/infrastructure/markup/PhabricatorMarkupEngine.php @@ -242,7 +242,9 @@ } foreach ($objects as $key => $info) { - if (isset($blocks[$key])) { + // False check in case MySQL doesn't support unicode characters + // in the string (T1191), resulting in unserialize returning false. + if (isset($blocks[$key]) && $blocks[$key]->getCacheData() !== false) { // If we already have a preprocessing cache, we don't need to rebuild // it. continue;