From ce228fef98e1c6008680148673247ac5b100b706 Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Tue, 15 Feb 2022 16:10:19 -0500 Subject: [PATCH 1/3] Fix infinite recursion when merge sourcemaps --- packages/babel-core/src/transformation/file/merge-map.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/babel-core/src/transformation/file/merge-map.ts b/packages/babel-core/src/transformation/file/merge-map.ts index 1742db173f67..4b902c27bf82 100644 --- a/packages/babel-core/src/transformation/file/merge-map.ts +++ b/packages/babel-core/src/transformation/file/merge-map.ts @@ -6,8 +6,14 @@ export default function mergeSourceMap( map: SourceMap, source: string, ): SourceMap { + // Prevent an infinite recursion if one of the input map's sources has the + // same resolved path as the input map. In the case, it would keep find the + // input map, then get it's sources which will include a path like the input + // map, on and on. + let found = false; const result = remapping(rootless(map), (s, ctx) => { - if (s === source) { + if (s === source && !found) { + found = true; // We empty the source location, which will prevent the sourcemap from // becoming relative to the input's location. Eg, if we're transforming a // file 'foo/bar.js', and it is a transformation of a `baz.js` file in the From 00d9139edf7bc60c721796967db7a2e8721ca3ec Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Tue, 15 Feb 2022 16:38:33 -0500 Subject: [PATCH 2/3] Add test case --- .../source-maps/input-source-map-same-location/input.js | 5 +++++ .../input-source-map-same-location/options.json | 3 +++ .../source-maps/input-source-map-same-location/output.js | 3 +++ .../input-source-map-same-location/source-map.json | 7 +++++++ 4 files changed, 18 insertions(+) create mode 100644 packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js create mode 100644 packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/options.json create mode 100644 packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/output.js create mode 100644 packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/source-map.json diff --git a/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js new file mode 100644 index 000000000000..1d53e59dc3c1 --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js @@ -0,0 +1,5 @@ +var foo = function () { + return 4; +}; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvdXJjZS1tYXBzL2lucHV0LXNvdXJjZS1tYXAtc2FtZS1sb2NhdGlvbi9pbnB1dC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLFk7U0FBTSxDO0NBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZm9vID0gKCkgPT4gNDsiXX0= diff --git a/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/options.json b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/options.json new file mode 100644 index 000000000000..0e6084f210d8 --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/options.json @@ -0,0 +1,3 @@ +{ + "inputSourceMap": true +} diff --git a/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/output.js b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/output.js new file mode 100644 index 000000000000..cf3efeceb306 --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/output.js @@ -0,0 +1,3 @@ +var foo = function () { + return 4; +}; diff --git a/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/source-map.json b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/source-map.json new file mode 100644 index 000000000000..f538878eed17 --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/source-map.json @@ -0,0 +1,7 @@ +{ + "mappings": "AAAA,UAAU,Y;SAAM;AAAC,CAAjB", + "names": [], + "sources": ["source-maps/input-source-map-same-location/input.js"], + "sourcesContent": ["var foo = () => 4;"], + "version": 3 +} From 9dbf27388ce942dc2730b614e560ff313541d356 Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Tue, 15 Feb 2022 16:40:37 -0500 Subject: [PATCH 3/3] Externalize the sourcemap --- .../input-source-map-same-location/input.js | 3 ++- .../input-source-map-same-location/input.js.map | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js.map diff --git a/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js index 1d53e59dc3c1..eab60fa14718 100644 --- a/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js +++ b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js @@ -2,4 +2,5 @@ var foo = function () { return 4; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvdXJjZS1tYXBzL2lucHV0LXNvdXJjZS1tYXAtc2FtZS1sb2NhdGlvbi9pbnB1dC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLFk7U0FBTSxDO0NBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZm9vID0gKCkgPT4gNDsiXX0= +//# sourceMappingURL=input.js.map + diff --git a/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js.map b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js.map new file mode 100644 index 000000000000..b7c811bfd09b --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/source-maps/input-source-map-same-location/input.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "sources": [ + "source-maps/input-source-map-same-location/input.js" + ], + "names": [], + "mappings": "AAAA,UAAU,Y;SAAM,C;CAAC", + "sourcesContent": [ + "var foo = () => 4;" + ] +}