Skip to content

Commit

Permalink
fix #442 - Prevent crash when cursor is in the middle of a UTF sequence
Browse files Browse the repository at this point in the history
  • Loading branch information
Lars-Kristiansen committed Feb 24, 2018
1 parent d6ce0a2 commit 7e70c26
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/dcd/server/autocomplete/complete.d
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,15 @@ AutocompleteResponse dotCompletion(T)(T beforeTokens, const(Token)[] tokenArray,
// of at the end
auto t = beforeTokens[$ - 1];
if (cursorPosition - t.index >= 0 && cursorPosition - t.index <= t.text.length)
{
partial = t.text[0 .. cursorPosition - t.index];
significantTokenType = tok!"identifier";
// issue 442 - prevent `partial` to start in the middle of a MBC
// since later there's a non-nothrow call to `toUpper`
import std.utf : validate, UTFException;
try validate(partial);
catch (UTFException) partial = "";
}
significantTokenType = partial.length ? tok!"identifier" : tok!"";
beforeTokens = beforeTokens[0 .. $ - 1];
}
else if (beforeTokens.length >= 2 && beforeTokens[$ - 1] == tok!".")
Expand Down
Empty file.
1 change: 1 addition & 0 deletions tests/tc_middle_of_utf/file.d
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ß
5 changes: 5 additions & 0 deletions tests/tc_middle_of_utf/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
set -e
set -u

../../bin/dcd-client $1 file.d -c1 > actual1.txt
diff actual1.txt expected1.txt

0 comments on commit 7e70c26

Please sign in to comment.