If something puts a string that's invalid UTF-8 in a JS config variable,
JSON serialization will fail on the entire config blob. Currently, this
causes the entire config blob to be silently dropped, which breaks all
JavaScript because elementary variables like wgPageName are missing.
This change makes this scenario fail loudly rather than quietly, by
throwing an exception. This also makes bugs like these easier to track
down.
Bug: T206475
Change-Id: Ief2ae00228389a23627d440dc1cd9a54cf2b6926
*
* @param array $configuration List of configuration values keyed by variable name
* @return string JavaScript code
+ * @throws Exception
*/
public static function makeConfigSetScript( array $configuration ) {
- return Xml::encodeJsCall(
+ $js = Xml::encodeJsCall(
'mw.config.set',
[ $configuration ],
self::inDebugMode()
);
+ if ( $js === false ) {
+ throw new Exception(
+ 'JSON serialization of config data failed. ' .
+ 'This usually means the config data is not valid UTF-8.'
+ );
+ }
+ return $js;
}
/**