fix(Buffer): prevent integer bit truncation crash in files with extremely long lines
This commit is contained in:
parent
5164164fd7
commit
581dbfb749
2 changed files with 5 additions and 5 deletions
|
@ -517,16 +517,16 @@ const Node = union(enum) {
|
|||
return pred(ecg);
|
||||
}
|
||||
|
||||
pub fn get_line_width_map(self: *const Node, line: usize, map: *ArrayList(u16), plane: Plane) error{ Stop, NoSpaceLeft }!void {
|
||||
pub fn get_line_width_map(self: *const Node, line: usize, map: *ArrayList(usize), plane: Plane) error{ Stop, NoSpaceLeft }!void {
|
||||
const Ctx = struct {
|
||||
map: *ArrayList(u16),
|
||||
map: *ArrayList(usize),
|
||||
wcwidth: usize = 0,
|
||||
fn walker(ctx_: *anyopaque, egc: []const u8, wcwidth: usize, _: Plane) Walker {
|
||||
const ctx = @as(*@This(), @ptrCast(@alignCast(ctx_)));
|
||||
var n = egc.len;
|
||||
while (n > 0) : (n -= 1) {
|
||||
const p = ctx.map.addOne() catch |e| return .{ .err = e };
|
||||
p.* = @intCast(ctx.wcwidth);
|
||||
p.* = ctx.wcwidth;
|
||||
}
|
||||
ctx.wcwidth += wcwidth;
|
||||
return if (egc[0] == '\n') Walker.stop else Walker.keep_walking;
|
||||
|
|
|
@ -3856,7 +3856,7 @@ pub const EditorWidget = struct {
|
|||
};
|
||||
|
||||
pub const PosToWidthCache = struct {
|
||||
cache: std.ArrayList(u16),
|
||||
cache: std.ArrayList(usize),
|
||||
cached_line: usize = std.math.maxInt(usize),
|
||||
cached_root: ?Buffer.Root = null,
|
||||
|
||||
|
@ -3864,7 +3864,7 @@ pub const PosToWidthCache = struct {
|
|||
|
||||
pub fn init(a: Allocator) !Self {
|
||||
return .{
|
||||
.cache = try std.ArrayList(u16).initCapacity(a, 2048),
|
||||
.cache = try std.ArrayList(usize).initCapacity(a, 2048),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue