From abb69c6c82d61cf18f14270650a68896a3d8ed47 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Tue, 14 Aug 2001 03:09:59 +0000 Subject: [PATCH] fixed the last of the off-by-one errors (some are refixed, again...) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11371 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- contrib/src/stc/gen_iface.py | 24 ++++++++++++++---------- contrib/src/stc/stc.cpp | 24 ++++++++++++++---------- src/stc/gen_iface.py | 24 ++++++++++++++---------- src/stc/stc.cpp | 24 ++++++++++++++---------- 4 files changed, 56 insertions(+), 40 deletions(-) diff --git a/contrib/src/stc/gen_iface.py b/contrib/src/stc/gen_iface.py index be86c9ce0e..eba0f3c586 100644 --- a/contrib/src/stc/gen_iface.py +++ b/contrib/src/stc/gen_iface.py @@ -87,8 +87,9 @@ methodOverrideMap = { '''wxString %s(int startPos, int endPos) { wxString text; int len = endPos - startPos; + if (!len) return ""; TextRange tr; - tr.lpstrText = text.GetWriteBuf(len*2+1); + tr.lpstrText = text.GetWriteBuf(len*2); tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; SendMsg(%s, 0, (long)&tr); @@ -112,10 +113,11 @@ methodOverrideMap = { '''wxString %s(int* linePos) { wxString text; int len = LineLength(GetCurrentLine()); + if (!len) return ""; char* buf = text.GetWriteBuf(len); int pos = SendMsg(%s, len, (long)buf); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); if (linePos) *linePos = pos; return text;''', @@ -280,10 +282,11 @@ methodOverrideMap = { '''wxString %s(int line) { wxString text; int len = LineLength(line); + if (!len) return ""; char* buf = text.GetWriteBuf(len); int pos = SendMsg(%s, line, (long)buf); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text;''', @@ -300,10 +303,11 @@ methodOverrideMap = { GetSelection(&start, &end); int len = end - start; - char* buff = text.GetWriteBuf(len+1); + if (!len) return ""; + char* buff = text.GetWriteBuf(len); SendMsg(%s, 0, (long)buff); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text;''', ('Retrieve the selected text.',)), @@ -314,14 +318,15 @@ methodOverrideMap = { '''wxString %s(int startPos, int endPos) { wxString text; int len = endPos - startPos; - char* buff = text.GetWriteBuf(len+1); + if (!len) return ""; + char* buff = text.GetWriteBuf(len); TextRange tr; tr.lpstrText = buff; tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; SendMsg(%s, 0, (long)&tr); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text;''', ('Retrieve a range of text.',)), @@ -339,11 +344,10 @@ methodOverrideMap = { '''wxString %s() { wxString text; int len = GetTextLength()+1; - char* buff = text.GetWriteBuf(len+1); + char* buff = text.GetWriteBuf(len); SendMsg(%s, len, (long)buff); - buff[len] = 0; - text.UngetWriteBuf(); + text.UngetWriteBuf(len-1); return text;''', ('Retrieve all the text in the document.', )), diff --git a/contrib/src/stc/stc.cpp b/contrib/src/stc/stc.cpp index bed2b4ed46..6adfd80a84 100644 --- a/contrib/src/stc/stc.cpp +++ b/contrib/src/stc/stc.cpp @@ -253,8 +253,9 @@ void wxStyledTextCtrl::SetSavePoint() { wxString wxStyledTextCtrl::GetStyledText(int startPos, int endPos) { wxString text; int len = endPos - startPos; + if (!len) return ""; TextRange tr; - tr.lpstrText = text.GetWriteBuf(len*2+1); + tr.lpstrText = text.GetWriteBuf(len*2); tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; SendMsg(2015, 0, (long)&tr); @@ -319,10 +320,11 @@ void wxStyledTextCtrl::SetAnchor(int posAnchor) { wxString wxStyledTextCtrl::GetCurLine(int* linePos) { wxString text; int len = LineLength(GetCurrentLine()); + if (!len) return ""; char* buf = text.GetWriteBuf(len); int pos = SendMsg(2027, len, (long)buf); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); if (linePos) *linePos = pos; return text; @@ -921,10 +923,11 @@ int wxStyledTextCtrl::GetFirstVisibleLine() { wxString wxStyledTextCtrl::GetLine(int line) { wxString text; int len = LineLength(line); + if (!len) return ""; char* buf = text.GetWriteBuf(len); int pos = SendMsg(2153, line, (long)buf); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text; } @@ -972,10 +975,11 @@ wxString wxStyledTextCtrl::GetSelectedText() { GetSelection(&start, &end); int len = end - start; - char* buff = text.GetWriteBuf(len+1); + if (!len) return ""; + char* buff = text.GetWriteBuf(len); SendMsg(2161, 0, (long)buff); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text; } @@ -983,14 +987,15 @@ wxString wxStyledTextCtrl::GetSelectedText() { wxString wxStyledTextCtrl::GetTextRange(int startPos, int endPos) { wxString text; int len = endPos - startPos; - char* buff = text.GetWriteBuf(len+1); + if (!len) return ""; + char* buff = text.GetWriteBuf(len); TextRange tr; tr.lpstrText = buff; tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; SendMsg(2162, 0, (long)&tr); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text; } @@ -1078,11 +1083,10 @@ void wxStyledTextCtrl::SetText(const wxString& text) { wxString wxStyledTextCtrl::GetText() { wxString text; int len = GetTextLength()+1; - char* buff = text.GetWriteBuf(len+1); + char* buff = text.GetWriteBuf(len); SendMsg(2182, len, (long)buff); - buff[len] = 0; - text.UngetWriteBuf(); + text.UngetWriteBuf(len-1); return text; } diff --git a/src/stc/gen_iface.py b/src/stc/gen_iface.py index be86c9ce0e..eba0f3c586 100644 --- a/src/stc/gen_iface.py +++ b/src/stc/gen_iface.py @@ -87,8 +87,9 @@ methodOverrideMap = { '''wxString %s(int startPos, int endPos) { wxString text; int len = endPos - startPos; + if (!len) return ""; TextRange tr; - tr.lpstrText = text.GetWriteBuf(len*2+1); + tr.lpstrText = text.GetWriteBuf(len*2); tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; SendMsg(%s, 0, (long)&tr); @@ -112,10 +113,11 @@ methodOverrideMap = { '''wxString %s(int* linePos) { wxString text; int len = LineLength(GetCurrentLine()); + if (!len) return ""; char* buf = text.GetWriteBuf(len); int pos = SendMsg(%s, len, (long)buf); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); if (linePos) *linePos = pos; return text;''', @@ -280,10 +282,11 @@ methodOverrideMap = { '''wxString %s(int line) { wxString text; int len = LineLength(line); + if (!len) return ""; char* buf = text.GetWriteBuf(len); int pos = SendMsg(%s, line, (long)buf); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text;''', @@ -300,10 +303,11 @@ methodOverrideMap = { GetSelection(&start, &end); int len = end - start; - char* buff = text.GetWriteBuf(len+1); + if (!len) return ""; + char* buff = text.GetWriteBuf(len); SendMsg(%s, 0, (long)buff); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text;''', ('Retrieve the selected text.',)), @@ -314,14 +318,15 @@ methodOverrideMap = { '''wxString %s(int startPos, int endPos) { wxString text; int len = endPos - startPos; - char* buff = text.GetWriteBuf(len+1); + if (!len) return ""; + char* buff = text.GetWriteBuf(len); TextRange tr; tr.lpstrText = buff; tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; SendMsg(%s, 0, (long)&tr); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text;''', ('Retrieve a range of text.',)), @@ -339,11 +344,10 @@ methodOverrideMap = { '''wxString %s() { wxString text; int len = GetTextLength()+1; - char* buff = text.GetWriteBuf(len+1); + char* buff = text.GetWriteBuf(len); SendMsg(%s, len, (long)buff); - buff[len] = 0; - text.UngetWriteBuf(); + text.UngetWriteBuf(len-1); return text;''', ('Retrieve all the text in the document.', )), diff --git a/src/stc/stc.cpp b/src/stc/stc.cpp index bed2b4ed46..6adfd80a84 100644 --- a/src/stc/stc.cpp +++ b/src/stc/stc.cpp @@ -253,8 +253,9 @@ void wxStyledTextCtrl::SetSavePoint() { wxString wxStyledTextCtrl::GetStyledText(int startPos, int endPos) { wxString text; int len = endPos - startPos; + if (!len) return ""; TextRange tr; - tr.lpstrText = text.GetWriteBuf(len*2+1); + tr.lpstrText = text.GetWriteBuf(len*2); tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; SendMsg(2015, 0, (long)&tr); @@ -319,10 +320,11 @@ void wxStyledTextCtrl::SetAnchor(int posAnchor) { wxString wxStyledTextCtrl::GetCurLine(int* linePos) { wxString text; int len = LineLength(GetCurrentLine()); + if (!len) return ""; char* buf = text.GetWriteBuf(len); int pos = SendMsg(2027, len, (long)buf); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); if (linePos) *linePos = pos; return text; @@ -921,10 +923,11 @@ int wxStyledTextCtrl::GetFirstVisibleLine() { wxString wxStyledTextCtrl::GetLine(int line) { wxString text; int len = LineLength(line); + if (!len) return ""; char* buf = text.GetWriteBuf(len); int pos = SendMsg(2153, line, (long)buf); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text; } @@ -972,10 +975,11 @@ wxString wxStyledTextCtrl::GetSelectedText() { GetSelection(&start, &end); int len = end - start; - char* buff = text.GetWriteBuf(len+1); + if (!len) return ""; + char* buff = text.GetWriteBuf(len); SendMsg(2161, 0, (long)buff); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text; } @@ -983,14 +987,15 @@ wxString wxStyledTextCtrl::GetSelectedText() { wxString wxStyledTextCtrl::GetTextRange(int startPos, int endPos) { wxString text; int len = endPos - startPos; - char* buff = text.GetWriteBuf(len+1); + if (!len) return ""; + char* buff = text.GetWriteBuf(len); TextRange tr; tr.lpstrText = buff; tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; SendMsg(2162, 0, (long)&tr); - text.UngetWriteBuf(); + text.UngetWriteBuf(len); return text; } @@ -1078,11 +1083,10 @@ void wxStyledTextCtrl::SetText(const wxString& text) { wxString wxStyledTextCtrl::GetText() { wxString text; int len = GetTextLength()+1; - char* buff = text.GetWriteBuf(len+1); + char* buff = text.GetWriteBuf(len); SendMsg(2182, len, (long)buff); - buff[len] = 0; - text.UngetWriteBuf(); + text.UngetWriteBuf(len-1); return text; } -- 2.47.2