Page MenuHomePhabricator

Source map invalid for multi-line backtick strings (breaks when debugging MultimediaViewer extension)
Closed, ResolvedPublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

  1. Given:
    • wfLoadExtension('MultimediaViewer')
    • $wgUseInstantCommons = true; (or upload a local image)
    • [[File:Examp.jpg]] on the main page
  2. add throw new Error('x'); at the top of mmv.lightboxinterface.js
  3. view Main Page

What happens?:

Stack trace is not mapped. Likewise, setting a debugger; breakpoint in an event handler and triggering it leads the browser to pause in invisible space after the end of a file.

Other information (browser name/version, screenshots, etc.):

I narrowed it down by removing and restoring large chunks of code alternatingly until narrowing it down to a multi line backtick string literal in mmv.ui.canvas.js.

Minimal repro:

LocalSettings.php
$wgResourceModules['krinkle'] = [
	'scripts' => [
		[ 'name' => 'a.js', 'content' => "var str = `foo\nbar`;\n" ],
		[ 'name' => 'b.js', 'content' => "throw new Error('x');\n" ],
	]
];
$wgHooks['BeforePageDisplay'][] = function ( $out ) {
	$out->addModules('krinkle');
};

In this way, the error trace is not mapped. If you remove the \n in foo\nbar, the error ends up mapped (correctly) to b.js.

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript

MappingsGenerator::outputToken() is documented as taking a string which does not contain a line break, which I think was just to simplify the advancing of curOutColumn on line 154 compared to the algorithm used by MappingsGenerator::outputSpace(). In your example, the token is `foo\nbar` so the output line/column ends up being 0:18 not 1:5.

Change 963844 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/libs/Minify@master] Fix source map for multi-line template literals

https://gerrit.wikimedia.org/r/963844

Change 963844 merged by jenkins-bot:

[mediawiki/libs/Minify@master] Fix source map for multi-line template literals

https://gerrit.wikimedia.org/r/963844

Krinkle triaged this task as High priority.Oct 6 2023, 4:09 AM
Krinkle added a project: Wikimedia-Minify.

Change 963857 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/libs/Minify@master] Tag 2.5.1

https://gerrit.wikimedia.org/r/963857

Change 963857 merged by jenkins-bot:

[mediawiki/libs/Minify@master] Tag 2.5.1

https://gerrit.wikimedia.org/r/963857

Change 965613 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/vendor@master] Update wikimedia/minify to 2.5.1

https://gerrit.wikimedia.org/r/965613

Change 965614 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/core@master] ResourceLoader: Update wikimedia/minify to 2.5.1

https://gerrit.wikimedia.org/r/965614

Change 965224 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/core@REL1_41] ResourceLoader: Update wikimedia/minify to 2.5.1

https://gerrit.wikimedia.org/r/965224

Change 965613 merged by jenkins-bot:

[mediawiki/vendor@master] Update wikimedia/minify to 2.5.1

https://gerrit.wikimedia.org/r/965613

The update broke Beta-Cluster-Infrastructure maintenance/update.php (which is run on an hourly basis via the beta-update-databases-eqiad job):

wikimedia/minify: 2.5.1 installed, 2.5.0 required.
Error: your composer.lock file is not up to date. Run "composer update --no-dev" to install newer dependencies

That is because the requested versions mismatch:

mediawiki/vendor2.5.1
mediawiki/core2.5.0

And will be resolved as soon as https://gerrit.wikimedia.org/r/c/mediawiki/core/+/965614/ is merged :)

It's because there was a mediawiki/vendor REL1_41 patch: https://gerrit.wikimedia.org/r/c/mediawiki/vendor/+/965615 – I didn't realize it exists at first and didn't merge it. This is why https://gerrit.wikimedia.org/r/c/mediawiki/core/+/965614 is not merging, because of the Depends-On line, which uses the change ID shared by the REL1_41 and master patches (T210685).

Change 965614 merged by jenkins-bot:

[mediawiki/core@master] ResourceLoader: Update wikimedia/minify to 2.5.1

https://gerrit.wikimedia.org/r/965614

Change 965224 merged by jenkins-bot:

[mediawiki/core@REL1_41] ResourceLoader: Update wikimedia/minify to 2.5.1

https://gerrit.wikimedia.org/r/965224

Mentioned in SAL (#wikimedia-releng) [2023-10-13T10:08:33Z] <hashar> deployment-prep: manually triggering https://integration.wikimedia.org/ci/job/beta-update-databases-eqiad/ after a composer version clash between core and vendor | T348280

It's because there was a mediawiki/vendor REL1_41 patch: https://gerrit.wikimedia.org/r/c/mediawiki/vendor/+/965615 – I didn't realize it exists at first and didn't merge it. This is why https://gerrit.wikimedia.org/r/c/mediawiki/core/+/965614 is not merging, because of the Depends-On line, which uses the change ID shared by the REL1_41 and master patches (T210685).

That explains it! Depends-On does not take branch into account. The update for mediawiki/core master has merged and got pulled on the beta cluster. I have manually triggered beta-update-databases-eqiad and it processing the updates.

Thank you @matmarex !