From 552c97eea4d2d0fdd33f14b0baf9ba15182117ef Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 27 Mar 2024 20:45:55 -0700 Subject: [PATCH] font/freetype: avoid overflows with u8 font size --- src/font/face.zig | 3 ++- src/font/face/freetype.zig | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/font/face.zig b/src/font/face.zig index 819142b0c..38b265eb8 100644 --- a/src/font/face.zig +++ b/src/font/face.zig @@ -40,7 +40,8 @@ pub const DesiredSize = struct { // Converts points to pixels pub fn pixels(self: DesiredSize) u16 { // 1 point = 1/72 inch - return (self.points * self.ydpi) / 72; + const points_u16: u16 = @intCast(self.points); + return (points_u16 * self.ydpi) / 72; } }; diff --git a/src/font/face/freetype.zig b/src/font/face/freetype.zig index 5a8c69dfa..d32217a02 100644 --- a/src/font/face/freetype.zig +++ b/src/font/face/freetype.zig @@ -137,7 +137,7 @@ pub const Face = struct { // to what the user requested. Otherwise, we can choose an arbitrary // pixel size. if (face.isScalable()) { - const size_26dot6 = @as(i32, @intCast(size.points << 6)); // mult by 64 + const size_26dot6 = @as(i32, @intCast(size.points)) << 6; // mult by 64 try face.setCharSize(0, size_26dot6, size.xdpi, size.ydpi); } else try selectSizeNearest(face, size.pixels()); }