Skip to content

Commit 74b317e

Browse files
romtsnclaude
andcommitted
fix: Cap span expansion at u16::MAX (65535) line range
Prevents excessive iteration from malformed mapping files where the original line range could be extremely large (up to u32::MAX). The JVM bytecode maximum line number is 65535, so any span beyond that is invalid and falls through to single-line handling. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b4acde2 commit 74b317e

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

src/cache/mod.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1002,9 +1002,12 @@ fn iterate_with_lines<'a>(
10021002
);
10031003
}
10041004
// Span expansion: if the original range spans multiple lines,
1005-
// emit one frame per original line.
1005+
// emit one frame per original line. Cap the span at
1006+
// u16::MAX (65535), the JVM bytecode maximum line number.
10061007
if member.original_endline != u32::MAX
10071008
&& member.original_endline > member.original_startline().unwrap_or(0)
1009+
&& (member.original_endline - member.original_startline().unwrap_or(0))
1010+
<= u16::MAX as u32
10081011
{
10091012
let first_line = member.original_startline().unwrap_or(0) as usize;
10101013
let last_line = member.original_endline as usize;

src/mapper.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -698,10 +698,11 @@ impl<'s> ProguardMapper<'s> {
698698
continue;
699699
}
700700
// Span expansion: if the original range spans multiple lines,
701-
// emit one frame per original line.
701+
// emit one frame per original line. Cap the span at
702+
// u16::MAX (65535), the JVM bytecode maximum line number.
702703
if let Some(oe) = member.original_endline {
703704
let os = member.original_startline.unwrap_or(0);
704-
if oe > os {
705+
if oe > os && (oe - os) <= u16::MAX as usize {
705706
for line in os..=oe {
706707
collected.frames.push(map_member_without_lines(
707708
&frame,

0 commit comments

Comments
 (0)