diff options
| author | Piotr Czarnecki <pioczarn@gmail.com> | 2015-02-08 23:26:12 +0100 |
|---|---|---|
| committer | Piotr Czarnecki <pioczarn@gmail.com> | 2015-02-08 23:26:12 +0100 |
| commit | 89b2e9f6f34ce00b3d6c24650922de26c8ed1e44 (patch) | |
| tree | 6ab6d73c67a39bff5e957d33d2ed708926f1b617 /src/libsyntax | |
| parent | d4f9ec566249f88845c88c8b897097a262b4e0af (diff) | |
| download | rust-89b2e9f6f34ce00b3d6c24650922de26c8ed1e44.tar.gz rust-89b2e9f6f34ce00b3d6c24650922de26c8ed1e44.zip | |
syntax: Fix integer underflow in diagnostic
Fixes #22091
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/diagnostic.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index 454209bdba2..83a4d938bb5 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -518,10 +518,11 @@ fn highlight_lines(err: &mut EmitterWriter, let count = match lastc { // Most terminals have a tab stop every eight columns by default '\t' => 8 - col%8, - _ => lastc.width(false).unwrap_or(1), + _ => lastc.width(false).unwrap_or(0), }; col += count; - s.extend(::std::iter::repeat('~').take(count - 1)); + s.extend(::std::iter::repeat('~').take(count)); + let hi = cm.lookup_char_pos(sp.hi); if hi.col != lo.col { for (pos, ch) in iter { @@ -534,6 +535,12 @@ fn highlight_lines(err: &mut EmitterWriter, s.extend(::std::iter::repeat('~').take(count)); } } + + if s.len() > 1 { + // One extra squiggly is replaced by a "^" + s.pop(); + } + try!(print_maybe_styled(err, &format!("{}\n", s)[], term::attr::ForegroundColor(lvl.color()))); |
