summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2023-05-19 18:57:18 +0200
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2023-05-19 18:57:18 +0200
commit89454508a2024da5fde5db309ede45a0af9cdeb3 (patch)
tree89a42c469312b86afc1c81d28aeccfb9a7b058fa /src
parent033880673addca9c96abcfb09e68f855b6712b56 (diff)
Fix Fl_Simple_Terminal::append(str, len) assumes a null terminated string (#728)
Diffstat (limited to 'src')
-rw-r--r--src/Fl_Simple_Terminal.cxx2
-rw-r--r--src/Fl_Text_Buffer.cxx12
2 files changed, 7 insertions, 7 deletions
diff --git a/src/Fl_Simple_Terminal.cxx b/src/Fl_Simple_Terminal.cxx
index b8f1f403d..1f6933326 100644
--- a/src/Fl_Simple_Terminal.cxx
+++ b/src/Fl_Simple_Terminal.cxx
@@ -910,7 +910,7 @@ void Fl_Simple_Terminal::append(const char *s, int len) {
append_ansi(s, len);
} else {
// raw append
- buf->append(s);
+ buf->append(s, len);
lines_ += ::strcnt(s, '\n'); // count total line feeds in string added
}
enforce_history_lines();
diff --git a/src/Fl_Text_Buffer.cxx b/src/Fl_Text_Buffer.cxx
index 1cfcd1b9b..b606af9de 100644
--- a/src/Fl_Text_Buffer.cxx
+++ b/src/Fl_Text_Buffer.cxx
@@ -380,7 +380,7 @@ char Fl_Text_Buffer::byte_at(int pos) const {
Insert some text at the given index.
Pos must be at a character boundary.
*/
-void Fl_Text_Buffer::insert(int pos, const char *text)
+void Fl_Text_Buffer::insert(int pos, const char *text, int insertedLength)
{
IS_UTF8_ALIGNED2(this, (pos))
IS_UTF8_ALIGNED(text)
@@ -399,7 +399,7 @@ void Fl_Text_Buffer::insert(int pos, const char *text)
call_predelete_callbacks(pos, 0);
/* insert and redisplay */
- int nInserted = insert_(pos, text);
+ int nInserted = insert_(pos, text, insertedLength);
mCursorPosHint = pos + nInserted;
IS_UTF8_ALIGNED2(this, (mCursorPosHint))
call_modify_callbacks(pos, 0, nInserted, 0, NULL);
@@ -454,7 +454,7 @@ void Fl_Text_Buffer::printf(const char *fmt, ...) {
Replace a range of text with new text.
Start and end must be at a character boundary.
*/
-void Fl_Text_Buffer::replace(int start, int end, const char *text)
+void Fl_Text_Buffer::replace(int start, int end, const char *text, int insertedLength)
{
// Range check...
if (!text)
@@ -471,7 +471,7 @@ void Fl_Text_Buffer::replace(int start, int end, const char *text)
call_predelete_callbacks(start, end - start);
const char *deletedText = text_range(start, end);
remove_(start, end);
- int nInserted = insert_(start, text);
+ int nInserted = insert_(start, text, insertedLength);
mCursorPosHint = start + nInserted;
call_modify_callbacks(start, end - start, nInserted, 0, deletedText);
free((void *) deletedText);
@@ -1355,12 +1355,12 @@ int Fl_Text_Buffer::search_backward(int startPos, const char *searchString,
Insert a string into the buffer.
Pos must be at a character boundary. Text must be a correct UTF-8 string.
*/
-int Fl_Text_Buffer::insert_(int pos, const char *text)
+int Fl_Text_Buffer::insert_(int pos, const char *text, int insertedLength)
{
if (!text || !*text)
return 0;
- int insertedLength = (int) strlen(text);
+ if (insertedLength == -1) insertedLength = (int) strlen(text);
/* Prepare the buffer to receive the new text. If the new text fits in
the current buffer, just move the gap (if necessary) to where