Fixed integer overflow in semantic_tokens.Builder.handleComments

This commit is contained in:
Alexandros Naskos 2021-05-03 15:36:29 +03:00
parent ab8c65eeda
commit 91643c04c9
No known key found for this signature in database
GPG Key ID: 02BF2E72B0EA32D2
3 changed files with 6 additions and 4 deletions

View File

@ -559,7 +559,7 @@ pub fn identifierFromPosition(pos_index: usize, handle: DocumentStore.Handle) []
if (pos_index + 1 >= text.len) return &[0]u8{}; if (pos_index + 1 >= text.len) return &[0]u8{};
var start_idx = pos_index; var start_idx = pos_index;
while (start_idx > 0 and isSymbolChar(text[start_idx-1])) { while (start_idx > 0 and isSymbolChar(text[start_idx - 1])) {
start_idx -= 1; start_idx -= 1;
} }
@ -569,7 +569,7 @@ pub fn identifierFromPosition(pos_index: usize, handle: DocumentStore.Handle) []
} }
if (end_idx <= start_idx) return &[0]u8{}; if (end_idx <= start_idx) return &[0]u8{};
return text[start_idx .. end_idx]; return text[start_idx..end_idx];
} }
fn isSymbolChar(char: u8) bool { fn isSymbolChar(char: u8) bool {
return std.ascii.isAlNum(char) or char == '_'; return std.ascii.isAlNum(char) or char == '_';

View File

@ -136,6 +136,9 @@ const Builder = struct {
/// Highlight normal comments and doc comments. /// Highlight normal comments and doc comments.
fn handleComments(self: *Builder, from: usize, to: usize) !void { fn handleComments(self: *Builder, from: usize, to: usize) !void {
if (from == to) return;
std.debug.assert(from < to);
const source = self.handle.tree.source; const source = self.handle.tree.source;
var i: usize = from; var i: usize = from;

View File

@ -73,7 +73,6 @@ const Server = struct {
const result = ",\"result\":"; const result = ",\"result\":";
const msg = rest[id_end + result.len .. rest.len - 1]; const msg = rest[id_end + result.len .. rest.len - 1];
if (std.mem.eql(u8, msg, expected)) { if (std.mem.eql(u8, msg, expected)) {
return; return;
} else { } else {
@ -108,7 +107,7 @@ const Server = struct {
fn startZls() !*std.ChildProcess { fn startZls() !*std.ChildProcess {
std.debug.print("\n", .{}); std.debug.print("\n", .{});
var process = try std.ChildProcess.init(&[_][]const u8{"zig-out/bin/zls" ++ suffix}, allocator); var process = try std.ChildProcess.init(&[_][]const u8{"zig-cache/bin/zls" ++ suffix}, allocator);
process.stdin_behavior = .Pipe; process.stdin_behavior = .Pipe;
process.stdout_behavior = .Pipe; process.stdout_behavior = .Pipe;
process.stderr_behavior = .Pipe; //std.ChildProcess.StdIo.Inherit; process.stderr_behavior = .Pipe; //std.ChildProcess.StdIo.Inherit;