From 19add104aee7fe970d99dc32ff06d025217f6eed Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 15 May 2015 10:05:05 +1000 Subject: Backed out changeset: 7caa35787c19 Change made reverse iteration dangerous. --- doc/ScintillaHistory.html | 3 --- src/Document.cxx | 9 +++++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index 2113dacba..e2b770fb1 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -517,9 +517,6 @@ Bug #1703.
  • - Ensure SCI_POSITIONRELATIVE returns a position clamped into the document range sensibly. -
  • -
  • Fix link error on Windows when SCI_NAMESPACE used.
  • diff --git a/src/Document.cxx b/src/Document.cxx index c25dc84b9..7d34dace1 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -767,23 +767,24 @@ bool Document::NextCharacter(int &pos, int moveDir) const { } } +// Return -1 on out-of-bounds int SCI_METHOD Document::GetRelativePosition(int positionStart, int characterOffset) const { int pos = positionStart; if (dbcsCodePage) { const int increment = (characterOffset > 0) ? 1 : -1; while (characterOffset != 0) { const int posNext = NextPosition(pos, increment); - if (posNext == Length()) - return posNext; - else if (posNext == pos) + if (posNext == pos) return INVALID_POSITION; pos = posNext; characterOffset -= increment; } } else { pos = positionStart + characterOffset; + if ((pos < 0) || (pos > Length())) + return INVALID_POSITION; } - return ClampPositionIntoDocument(pos); + return pos; } int Document::GetRelativePositionUTF16(int positionStart, int characterOffset) const { -- cgit v1.2.3