1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# HG changeset patch
# User Neil <nyamatongwe@gmail.com>
# Date 1489619799 -39600
# Node ID a78e38849624fca65cd615da3f976d22db03a48b
# Parent e8364d5495d60b675717c68f97cc527ab3fc95ee
Fix use-after-free in fold tags when top line folded then new top line inserted.
In SparseVector, string inserted at start then NULL inserted at start.
diff -r e8364d5495d6 -r a78e38849624 doc/ScintillaHistory.html
--- a/doc/ScintillaHistory.html Sat Mar 11 10:41:32 2017 +1100
+++ b/doc/ScintillaHistory.html Thu Mar 16 10:16:39 2017 +1100
@@ -555,6 +555,9 @@
For IMEs, do not clear selected text when there is no composition text to show.
</li>
<li>
+ Fix to crash with fold tags where line inserted at start.
+ </li>
+ <li>
Fix to stream selection mode when moving caret up or down.
<a href="http://sourceforge.net/p/scintilla/bugs/1905/">Bug #1905</a>.
</li>
diff -r e8364d5495d6 -r a78e38849624 src/SparseVector.h
--- a/src/SparseVector.h Sat Mar 11 10:41:32 2017 +1100
+++ b/src/SparseVector.h Thu Mar 16 10:16:39 2017 +1100
@@ -100,7 +100,8 @@
if (partition == 0) {
// Inserting at start of document so ensure 0
if (valueCurrent != T()) {
- ClearValue(0);
+ // Since valueCurrent is needed again, should not ClearValue
+ values->SetValueAt(0, T());
starts->InsertPartition(1, 0);
values->InsertValue(1, 1, valueCurrent);
starts->InsertText(0, insertLength);
diff -r e8364d5495d6 -r a78e38849624 test/unit/testSparseVector.cxx
--- a/test/unit/testSparseVector.cxx Sat Mar 11 10:41:32 2017 +1100
+++ b/test/unit/testSparseVector.cxx Thu Mar 16 10:16:39 2017 +1100
@@ -89,6 +89,18 @@
st.Check();
}
+ SECTION("InsertStringAtStartThenInsertSpaceAtStart") {
+ REQUIRE(1 == st.Elements());
+ st.InsertSpace(0, 5);
+ st.SetValueAt(0, "3");
+ REQUIRE(1 == st.Elements());
+ REQUIRE("3----" == Representation(st));
+ st.InsertSpace(0, 1);
+ REQUIRE(2 == st.Elements());
+ REQUIRE("-3----" == Representation(st));
+ st.Check();
+ }
+
SECTION("InsertAndDeleteAtEnd") {
REQUIRE(1 == st.Elements());
st.InsertSpace(0, 5);
|