Thank you, Chris.
On Tue, Mar 29, 2016 at 07:27:59PM -0400, Chris Moller wrote: > 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 > [1]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. > > References > > 1. https://github.com/ChrisMoller/aplwrap/blob/master/src/txtbuf.c