diff options
author | 2021-12-21 19:43:43 -0800 | |
---|---|---|
committer | 2021-12-21 19:43:43 -0800 | |
commit | 67b09911c17c26832d31ee56d596af4930e8d668 (patch) | |
tree | 306e700a233354bfd76bc333d1e291a1c9d8e101 | |
parent | 3043bb70e14a252ccc04af5fcc1f2742be1f8620 (diff) | |
download | bun-67b09911c17c26832d31ee56d596af4930e8d668.tar.gz bun-67b09911c17c26832d31ee56d596af4930e8d668.tar.zst bun-67b09911c17c26832d31ee56d596af4930e8d668.zip |
Fix crash when TSConfigJSON has an error and multiple TSConfigJSON files were parsed \nThis was caused by reusing the filename buffer inappropriately. For unclear reasons, this only impacted Linux.
-rw-r--r-- | src/resolver/resolver.zig | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/resolver/resolver.zig b/src/resolver/resolver.zig index 4a3fffb8a..3d7404a17 100644 --- a/src/resolver/resolver.zig +++ b/src/resolver/resolver.zig @@ -1358,7 +1358,10 @@ pub const Resolver = struct { false, null, ); - const key_path = Path.init(file); + // The file name needs to be persistent because it can have errors + // and if those errors need to print the filename + // then it will be undefined memory if we parse another tsconfig.json late + const key_path = try Path.init(file).dupeAlloc(r.allocator); const source = logger.Source.initPathString(key_path.text, entry.contents); const file_dir = source.path.sourceDir(); @@ -1366,6 +1369,7 @@ pub const Resolver = struct { var result = (try TSConfigJSON.parse(r.allocator, r.log, source, &r.caches.json, r.opts.jsx.development)) orelse return null; if (result.hasBaseURL()) { + // this might leak if (!std.fs.path.isAbsolute(result.base_url)) { const paths = [_]string{ file_dir, result.base_url }; |