Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid underflow in render_source_line #47677

Merged
merged 1 commit into from
Jan 31, 2018
Merged

Avoid underflow in render_source_line #47677

merged 1 commit into from
Jan 31, 2018

Commits on Jan 23, 2018

  1. Avoid underflow in render_source_line

    While testing #47655 I was able to make the compiler panic
    when it's compiled with debug assertions:
    
    ```shell
    > rustc /dev/null --crate-type proc-macro
    
    error: internal compiler error: unexpected panic
    
    note: the compiler unexpectedly panicked. this is a bug.
    
    note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
    
    note: rustc 1.25.0-dev running on x86_64-apple-darwin
    
    note: run with `RUST_BACKTRACE=1` for a backtrace
    
    thread 'rustc' panicked at 'attempt to subtract with overflow', librustc_errors/emitter.rs:287:49
    ```
    
    Without debug assertions the following warning is emitted:
    
    ```shell
    > rustc /dev/null --crate-type proc-macro
    
    warning: unused variable: `registrar`
     --> /dev/null:0:1
      |
      |
      = note: #[warn(unused_variables)] on by default
      = note: to avoid this warning, consider using `_registrar` instead
    ```
    
    The panic is due to the unused variable warning being spanned to
    `/dev/null:0:1`. When `render_source_line` subtracts 1 from the line
    number to look up the source line it panics due to underflow. Without
    debug assertions this would wrap and cause us to return a blank string
    instead.
    
    Fix by explicitly testing for 0 and exiting early. I'm unsure how to
    automatically test this now that #46655 has been approved.
    etaoins committed Jan 23, 2018
    Configuration menu
    Copy the full SHA
    c6377f8 View commit details
    Browse the repository at this point in the history