about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-08-12 23:31:13 -0700
committerEsteban Küber <esteban@kuber.com.ar>2019-08-12 23:31:13 -0700
commitd824edfc2c063cff6e6536a1fcb56be6d89fa0cd (patch)
treefd71783c3bbbc6e7cfa30aef1887c7c00893c87d /src/libsyntax
parent60960a260f7b5c695fd0717311d72ce62dd4eb43 (diff)
downloadrust-d824edfc2c063cff6e6536a1fcb56be6d89fa0cd.tar.gz
rust-d824edfc2c063cff6e6536a1fcb56be6d89fa0cd.zip
Do not ICE when synthesizing spans falling inside unicode chars
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/source_map.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/libsyntax/source_map.rs b/src/libsyntax/source_map.rs
index 4e29c77c89e..3c58cfbbb2b 100644
--- a/src/libsyntax/source_map.rs
+++ b/src/libsyntax/source_map.rs
@@ -554,8 +554,14 @@ impl SourceMap {
             }
 
             if let Some(ref src) = local_begin.sf.src {
+                if !src.is_char_boundary(start_index) || !src.is_char_boundary(end_index) {
+                    return Err(SpanSnippetError::IllFormedSpan(sp));
+                }
                 return Ok(extract_source(src, start_index, end_index));
             } else if let Some(src) = local_begin.sf.external_src.borrow().get_source() {
+                if !src.is_char_boundary(start_index) || !src.is_char_boundary(end_index) {
+                    return Err(SpanSnippetError::IllFormedSpan(sp));
+                }
                 return Ok(extract_source(src, start_index, end_index));
             } else {
                 return Err(SpanSnippetError::SourceNotAvailable {