diff --git a/cli/src/tests/parser_test.rs b/cli/src/tests/parser_test.rs
index d623126f..58cd1880 100644
--- a/cli/src/tests/parser_test.rs
+++ b/cli/src/tests/parser_test.rs
@@ -872,6 +872,40 @@ fn test_parsing_with_multiple_included_ranges() {
);
}
+#[test]
+fn test_parsing_with_included_range_containing_mismatched_positions() {
+ let source_code = "
test
{_ignore_this_part_}";
+
+ let mut parser = Parser::new();
+ parser.set_language(get_language("html")).unwrap();
+
+ let end_byte = source_code.find("{_ignore_this_part_").unwrap();
+
+ let range_to_parse = Range {
+ start_byte: 0,
+ start_point: Point {
+ row: 10,
+ column: 12,
+ },
+ end_byte,
+ end_point: Point {
+ row: 10,
+ column: 12 + end_byte,
+ },
+ };
+
+ parser.set_included_ranges(&[range_to_parse]).unwrap();
+
+ let html_tree = parser.parse(source_code, None).unwrap();
+
+ assert_eq!(html_tree.root_node().range(), range_to_parse);
+
+ assert_eq!(
+ html_tree.root_node().to_sexp(),
+ "(fragment (element (start_tag (tag_name)) (text) (end_tag (tag_name))))"
+ );
+}
+
#[test]
fn test_parsing_error_in_invalid_included_ranges() {
let mut parser = Parser::new();
diff --git a/lib/src/lexer.c b/lib/src/lexer.c
index 5d1965ad..033f93e9 100644
--- a/lib/src/lexer.c
+++ b/lib/src/lexer.c
@@ -110,7 +110,7 @@ static void ts_lexer_goto(Lexer *self, Length position) {
for (unsigned i = 0; i < self->included_range_count; i++) {
TSRange *included_range = &self->included_ranges[i];
if (included_range->end_byte > position.bytes) {
- if (included_range->start_byte > position.bytes) {
+ if (included_range->start_byte >= position.bytes) {
self->current_position = (Length) {
.bytes = included_range->start_byte,
.extent = included_range->start_point,