Hi, y'all,
I just stuck this patch in. It works fine for me, but, Christian, if
you could try it in your environment, I'd appreciate it.
Chris (also, BTW, "Christian" who happens to have a son named Robert
Christian Moller)
On 03/29/16 18:42, Christian Robert wrote:
Hi Chris,
I found a bug in
https://github.com/ChrisMoller/aplwrap/blob/master/src/txtbuf.c
The bug randomly make aplwrap to coredump, especially if you yse the
copy down
feature. Look for the word "HERE" below ...
int
handle_copy_down ()
{
GtkTextIter start_iter, end_iter;
if (gtk_text_buffer_get_selection_bounds (buffer, &start_iter,
&end_iter)) {
// Case 1: selection is not empty
//
// If selection does not span newline
// copy selection to end of buffer
// If selection does not end with a space
// append a space to end of buffer
// *Do not* scroll to end!
gchar *text = gtk_text_buffer_get_text (buffer,
&start_iter,
&end_iter,
FALSE);
if (text == NULL || strchr (text, '\n')) return 0;
gtk_text_buffer_get_end_iter (buffer, &end_iter);
gtk_text_buffer_place_cursor (buffer, &end_iter);
gtk_text_buffer_insert_at_cursor (buffer, text, -1);
if (text[strlen(text)-1] != ' ')
gtk_text_buffer_insert_at_cursor (buffer, " ", -1);
g_free (text);
return 1;
}
else {
// Case 2: selection is empty
//
// If cursor is in previous input
// copy previous input to end of buffer
// scroll to end of buffer
GtkTextIter insert_iter;
GtkTextMark *mark = gtk_text_buffer_get_insert (buffer);
gtk_text_buffer_get_iter_at_mark (buffer, &insert_iter, mark);
if (gtk_text_iter_has_tag (&insert_iter, get_tag(TAG_INP))) {
gint sz;
gchar *text = get_input_text (&sz);
gchar *ztext = g_try_malloc (sz+1-6);
if (ztext) {
memcpy(ztext, text+6, sz-6);
ztext[sz] = '\0'; // <--- *HERE*
handle_history_replacement (ztext);
g_free (ztext);
}
return 1;
}
else if (gtk_text_iter_has_tag (&insert_iter, get_tag(TAG_LCK)))
return 1;
return 0;
}
}
should be:
ztext[sz-6] = '\0';
or better, delete that line, the memcpy() above always include the
final '\0', I've traced it.
thanks for committing that change.
Christian Robert,
Poly.