[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-apl] About aplwrap
From: |
David B. Lamkins |
Subject: |
Re: [Bug-apl] About aplwrap |
Date: |
Tue, 29 Mar 2016 22:17:51 -0700 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
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