Skip to content

Commit cbeacfd

Browse files
authored
Merge pull request #14803 from rintaro/sourcekit-offset-guard
[SourceKit] Add defensive guard for invalid offset
2 parents 0ef5a5a + 3f232e7 commit cbeacfd

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
let a = 12
2+
3+
// rdar://problem/30346106
4+
// Invalid offset should trigger a crash.
5+
6+
// RUN: %sourcekitd-test \
7+
// RUN: -req=open %s -- %s == \
8+
// RUN: -req=edit -async -offset=0 -length=200 -replace='' %s -- %s == \
9+
// RUN: -req=cursor -offset=250 %s -- %s \
10+
// RUN: | %FileCheck %s
11+
12+
// CHECK: <empty cursor info>

tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,11 @@ void walkRelatedDecls(const ValueDecl *VD, const FnTy &Fn) {
496496
static StringRef getSourceToken(unsigned Offset,
497497
ImmutableTextSnapshotRef Snap) {
498498
auto MemBuf = Snap->getBuffer()->getInternalBuffer();
499+
500+
// FIXME: Invalid offset shouldn't reach here.
501+
if (Offset >= MemBuf->getBufferSize())
502+
return StringRef();
503+
499504
SourceManager SM;
500505
auto MemBufRef = llvm::MemoryBuffer::getMemBuffer(MemBuf->getBuffer(),
501506
MemBuf->getBufferIdentifier());

0 commit comments

Comments
 (0)