@@ -1272,6 +1272,40 @@ TEST(real_world_tests, line_numbers_reexports) {
12721272 ASSERT_EQ (result->re_exports [0 ].line , 2 );
12731273}
12741274
1275+ // Regression test for nodejs/node#62212:
1276+ // SIGSEGV when parsing a CJS bundle that starts with require() at position 0.
1277+ // tryBacktrackAddStarExportBinding was passed (source - 1) and dereferenced
1278+ // the pointer before checking it against the source boundary.
1279+ TEST (real_world_tests, require_at_start_of_input) {
1280+ // Minimal case: require() as the very first token triggers
1281+ // tryBacktrackAddStarExportBinding(startPos - 1) where startPos == source.
1282+ auto result = lexer::parse_commonjs (" require('./foo')" );
1283+ ASSERT_TRUE (result.has_value ());
1284+
1285+ // Typical ncc/webpack bundle pattern that starts with require()
1286+ auto result2 = lexer::parse_commonjs (
1287+ " require('./sourcemap-register.js');"
1288+ " (()=>{var __webpack_modules__={"
1289+ " 0:(module,exports,__webpack_require__)=>{"
1290+ " \" use strict\" ;"
1291+ " var _a=__webpack_require__(1);"
1292+ " exports.default=_a;"
1293+ " }"
1294+ " };"
1295+ " var __webpack_module_cache__={};"
1296+ " function __webpack_require__(id){"
1297+ " var c=__webpack_module_cache__[id];"
1298+ " if(c!==undefined)return c.exports;"
1299+ " var m=__webpack_module_cache__[id]={exports:{}};"
1300+ " __webpack_modules__[id](m,m.exports,__webpack_require__);"
1301+ " return m.exports;}"
1302+ " var __webpack_exports__=__webpack_require__(0);"
1303+ " module.exports=__webpack_exports__;"
1304+ " })();"
1305+ );
1306+ ASSERT_TRUE (result2.has_value ());
1307+ }
1308+
12751309TEST (real_world_tests, line_numbers_after_block_comment) {
12761310 auto result = lexer::parse_commonjs (
12771311 " /*\n "
0 commit comments