From 25e596bf0d094008ed250b4225ce72ef39ba4f77 Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Mon, 30 Jul 2007 10:40:09 +0000 Subject: [PATCH] Add allocation for NULL-terminated selection ends. git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@1765 ea778897-0a13-0410-b9d1-a72fbfd435f5 --- ChangeLog | 6 ++++++ src/callbacks.c | 4 +++- src/sciwrappers.c | 2 ++ src/search.c | 4 +++- src/tools.c | 2 +- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index de5691327..18ec36ded 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-07-30 Nick Treleaven + + * src/tools.c, src/sciwrappers.c, src/callbacks.c, src/search.c: + Add allocation for NULL-terminated selection ends. + + 2007-07-29 Enrico Tröger * scintilla/LexHTML.cxx, scintilla/Makefile.am: diff --git a/src/callbacks.c b/src/callbacks.c index fafabb398..f714360ed 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -1902,7 +1902,9 @@ on_menu_open_selected_file1_activate (GtkMenuItem *menuitem, if (sci_get_lines_selected(doc_list[idx].sci) == 1) { - filename = g_malloc(sci_get_selected_text_length(doc_list[idx].sci)); + gint len = sci_get_selected_text_length(doc_list[idx].sci); + + filename = g_malloc(len + 1); sci_get_selected_text(doc_list[idx].sci, filename); } else if (sci_get_lines_selected(doc_list[idx].sci) == 0) diff --git a/src/sciwrappers.c b/src/sciwrappers.c index b64dd6576..b108e49ca 100644 --- a/src/sciwrappers.c +++ b/src/sciwrappers.c @@ -509,6 +509,8 @@ void sci_get_text(ScintillaObject* sci, gint len, gchar* text) } +/* Text must be allocated sci_get_selected_text_length() + 1, because + * the selection will be NULL-terminated. */ void sci_get_selected_text(ScintillaObject* sci, gchar* text) { SSM( sci, SCI_GETSELTEXT, 0, (sptr_t) text); diff --git a/src/search.c b/src/search.c index 60d7c3ab8..f318c9165 100644 --- a/src/search.c +++ b/src/search.c @@ -213,7 +213,9 @@ static gchar *get_default_text(gint idx) if (sci_get_lines_selected(doc_list[idx].sci) == 1) { - s = g_malloc(sci_get_selected_text_length(doc_list[idx].sci)); + gint len = sci_get_selected_text_length(doc_list[idx].sci); + + s = g_malloc(len + 1); sci_get_selected_text(doc_list[idx].sci, s); } else if (sci_get_lines_selected(doc_list[idx].sci) == 0) diff --git a/src/tools.c b/src/tools.c index e7b1e75e1..6a7b7fd4a 100644 --- a/src/tools.c +++ b/src/tools.c @@ -180,7 +180,7 @@ void tools_execute_custom_command(gint idx, const gchar *command) // get selection len = sci_get_selected_text_length(doc_list[idx].sci); - sel = g_malloc0(len); + sel = g_malloc0(len + 1); sci_get_selected_text(doc_list[idx].sci, sel); // write data to the command