Replace catch bun.outOfMemory() with safer alternatives (#22141)

Replace `catch bun.outOfMemory()`, which can accidentally catch
non-OOM-related errors, with either `bun.handleOom` or a manual `catch
|err| switch (err)`.

(For internal tracking: fixes STAB-1070)

---------

Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
This commit is contained in:
taylor.fish
2025-08-26 12:50:25 -07:00
committed by GitHub
parent 300f486125
commit 437e15bae5
284 changed files with 1835 additions and 1662 deletions

View File

@@ -241,7 +241,7 @@ pub inline fn lenI(self: *MutableString) i32 {
}
pub fn toOwnedSlice(self: *MutableString) []u8 {
return bun.handleOom(self.list.toOwnedSlice(self.allocator));
return bun.handleOom(self.list.toOwnedSlice(self.allocator)); // TODO
}
pub fn toDynamicOwned(self: *MutableString) DynamicOwned([]u8) {

View File

@@ -22,7 +22,7 @@ const Node = struct {
next: ?*Node = null,
pub fn init(joiner_alloc: Allocator, slice: []const u8, slice_alloc: ?Allocator) *Node {
const node = joiner_alloc.create(Node) catch bun.outOfMemory();
const node = bun.handleOom(joiner_alloc.create(Node));
node.* = .{
.slice = slice,
.allocator = NullableAllocator.init(slice_alloc),
@@ -51,7 +51,7 @@ pub fn pushStatic(this: *StringJoiner, data: []const u8) void {
pub fn pushCloned(this: *StringJoiner, data: []const u8) void {
if (data.len == 0) return;
this.push(
this.allocator.dupe(u8, data) catch bun.outOfMemory(),
bun.handleOom(this.allocator.dupe(u8, data)),
this.allocator,
);
}

View File

@@ -124,7 +124,7 @@ pub const WTFStringImplStruct = extern struct {
pub fn toUTF8(this: WTFStringImpl, allocator: std.mem.Allocator) ZigString.Slice {
if (this.is8Bit()) {
if (bun.strings.toUTF8FromLatin1(allocator, this.latin1Slice()) catch bun.outOfMemory()) |utf8| {
if (bun.handleOom(bun.strings.toUTF8FromLatin1(allocator, this.latin1Slice()))) |utf8| {
return ZigString.Slice.init(allocator, utf8.items);
}
@@ -133,7 +133,7 @@ pub const WTFStringImplStruct = extern struct {
return ZigString.Slice.init(
allocator,
bun.strings.toUTF8Alloc(allocator, this.utf16Slice()) catch bun.outOfMemory(),
bun.handleOom(bun.strings.toUTF8Alloc(allocator, this.utf16Slice())),
);
}
@@ -141,7 +141,7 @@ pub const WTFStringImplStruct = extern struct {
pub fn toUTF8WithoutRef(this: WTFStringImpl, allocator: std.mem.Allocator) ZigString.Slice {
if (this.is8Bit()) {
if (bun.strings.toUTF8FromLatin1(allocator, this.latin1Slice()) catch bun.outOfMemory()) |utf8| {
if (bun.handleOom(bun.strings.toUTF8FromLatin1(allocator, this.latin1Slice()))) |utf8| {
return ZigString.Slice.init(allocator, utf8.items);
}
@@ -150,24 +150,24 @@ pub const WTFStringImplStruct = extern struct {
return ZigString.Slice.init(
allocator,
bun.strings.toUTF8Alloc(allocator, this.utf16Slice()) catch bun.outOfMemory(),
bun.handleOom(bun.strings.toUTF8Alloc(allocator, this.utf16Slice())),
);
}
pub fn toOwnedSliceZ(this: WTFStringImpl, allocator: std.mem.Allocator) [:0]u8 {
if (this.is8Bit()) {
if (bun.strings.toUTF8FromLatin1Z(allocator, this.latin1Slice()) catch bun.outOfMemory()) |utf8| {
if (bun.handleOom(bun.strings.toUTF8FromLatin1Z(allocator, this.latin1Slice()))) |utf8| {
return utf8.items[0 .. utf8.items.len - 1 :0];
}
return allocator.dupeZ(u8, this.latin1Slice()) catch bun.outOfMemory();
return bun.handleOom(allocator.dupeZ(u8, this.latin1Slice()));
}
return bun.strings.toUTF8AllocZ(allocator, this.utf16Slice()) catch bun.outOfMemory();
return bun.handleOom(bun.strings.toUTF8AllocZ(allocator, this.utf16Slice()));
}
pub fn toUTF8IfNeeded(this: WTFStringImpl, allocator: std.mem.Allocator) ?ZigString.Slice {
if (this.is8Bit()) {
if (bun.strings.toUTF8FromLatin1(allocator, this.latin1Slice()) catch bun.outOfMemory()) |utf8| {
if (bun.handleOom(bun.strings.toUTF8FromLatin1(allocator, this.latin1Slice()))) |utf8| {
return ZigString.Slice.init(allocator, utf8.items);
}
@@ -176,7 +176,7 @@ pub const WTFStringImplStruct = extern struct {
return ZigString.Slice.init(
allocator,
bun.strings.toUTF8Alloc(allocator, this.utf16Slice()) catch bun.outOfMemory(),
bun.handleOom(bun.strings.toUTF8Alloc(allocator, this.utf16Slice())),
);
}