@babel/runtime versions 7.21.0 and 7.20.13 offer Babel's essential, modular runtime helpers, crucial for ensuring compiled JavaScript code functions correctly across diverse environments. Both versions maintain the MIT license, rely on regenerator-runtime "^0.13.11" for async/await functionality and originate from the same Babel repository on GitHub.
The most apparent difference lies in the version number, representing a minor update from 7.20.13 to 7.21.0 which includes bug fixes and non-breaking new features. Version 7.21.0 released on February 20, 2023, slightly later than 7.20.13 released on January 21, 2023. Developers updating should note an increase in the package's unpacked size, from 237,529 bytes in 7.20.13 to 257,650 bytes in 7.21.0, alongside a rise in the file count from 203 to 205, highlighting the addition of new helpers or modifications to existing ones. The fileCount increase means that upgrading to 7.21.0 will bump the number of compiled helper files.
For developers leveraging Babel to transpile modern JavaScript, these runtime helpers are indispensable. They provide implementations for features like async/await, class inheritance, and other ES2015+ functionalities that might not be natively supported by older browsers or Node.js versions. The minor version bump suggests incremental improvements and potentially new helper functions. Regular updates of @babel/runtime are recommended to benefit from the latest optimizations and compatibility enhancements ensuring your Babel-compiled code runs smoothly.
All the vulnerabilities related to the version 7.21.0 of the package
Babel has inefficient RegExp complexity in generated code with .replace when transpiling named capturing groups
When using Babel to compile regular expression named capturing groups, Babel will generate a polyfill for the .replace
method that has quadratic complexity on some specific replacement pattern strings (i.e. the second argument passed to .replace
).
Your generated code is vulnerable if all the following conditions are true:
.replace
method on a regular expression that contains named capturing groups.replace
If you are using @babel/preset-env
with the targets
option, the transform that injects the vulnerable code is automatically enabled if:
You can verify what transforms @babel/preset-env
is using by enabling the debug
option.
This problem has been fixed in @babel/helpers
and @babel/runtime
7.26.10 and 8.0.0-alpha.17, please upgrade. It's likely that you do not directly depend on @babel/helpers
, and instead you depend on @babel/core
(which itself depends on @babel/helpers
). Upgrading to @babel/core
7.26.10 is not required, but it guarantees that you are on a new enough @babel/helpers
version.
Please note that just updating your Babel dependencies is not enough: you will also need to re-compile your code.
If you are passing user-provided strings as the second argument of .replace
on regular expressions that contain named capturing groups, validate the input and make sure it does not contain the substring $<
if it's then not followed by >
(possibly with other characters in between).
This vulnerability was reported and fixed in https://github.com/babel/babel/pull/17173.