Bug 842630 - Fix out of bounds in nsSVGTextFrame2::ResolvePositions. r=heycam

This commit is contained in:
Robert Longson 2013-03-27 10:19:02 +00:00
Родитель 4dd126b52b
Коммит dfd5800223
3 изменённых файлов: 6 добавлений и 4 удалений

Просмотреть файл

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg"><text dy="20 20">A<tspan style="display: none;">B</tspan></text></svg>

После

Ширина:  |  Высота:  |  Размер: 111 B

Просмотреть файл

@ -154,6 +154,7 @@ load 813420-1.svg
load 841163-1.svg load 841163-1.svg
load 841812-1.svg load 841812-1.svg
load 842009-1.svg load 842009-1.svg
load 842630-1.svg
load 842909-1.svg load 842909-1.svg
load 843072-1.svg load 843072-1.svg
load 847139-1.svg load 847139-1.svg

Просмотреть файл

@ -4079,10 +4079,7 @@ nsSVGTextFrame2::ResolvePositions(nsTArray<gfxPoint>& aDeltas)
// Fill in unspecified positions for all remaining characters, noting // Fill in unspecified positions for all remaining characters, noting
// them as unaddressable if they are. // them as unaddressable if they are.
uint32_t index = it.TextElementCharIndex(); uint32_t index = 0;
for (uint32_t i = 0; i < index; i++) {
mPositions.AppendElement(CharPosition::Unspecified(false));
}
while (it.Next()) { while (it.Next()) {
while (++index < it.TextElementCharIndex()) { while (++index < it.TextElementCharIndex()) {
mPositions.AppendElement(CharPosition::Unspecified(false)); mPositions.AppendElement(CharPosition::Unspecified(false));
@ -4090,6 +4087,9 @@ nsSVGTextFrame2::ResolvePositions(nsTArray<gfxPoint>& aDeltas)
mPositions.AppendElement(CharPosition::Unspecified( mPositions.AppendElement(CharPosition::Unspecified(
it.IsOriginalCharUnaddressable())); it.IsOriginalCharUnaddressable()));
} }
while (++index < it.TextElementCharIndex()) {
mPositions.AppendElement(CharPosition::Unspecified(false));
}
// Recurse over the content and fill in character positions as we go. // Recurse over the content and fill in character positions as we go.
bool forceStartOfChunk = false; bool forceStartOfChunk = false;