# HG changeset patch # User Bram Moolenaar # Date 1366815156 -7200 # Node ID f39af34195702c5587eff88dec51b40e327f418d # Parent 84991fa5e74fea2643f00fcc1ca40dada9ac745c updated for version 7.3.916 Problem: Using freed memory when pasting with the mouse (Issue 130). Solution: Get the byte value early. (hint by Dominique Pelle) diff --git a/src/buffer.c b/src/buffer.c --- a/src/buffer.c +++ b/src/buffer.c @@ -3506,7 +3506,7 @@ build_stl_str_hl(wp, out, outlen, fmt, u char_u *p; char_u *s; char_u *t; - char_u *linecont; + int byteval; #ifdef FEAT_EVAL win_T *o_curwin; buf_T *o_curbuf; @@ -3573,12 +3573,21 @@ build_stl_str_hl(wp, out, outlen, fmt, u fillchar = '-'; #endif - /* - * Get line & check if empty (cursorpos will show "0-1"). - * If inversion is possible we use it. Else '=' characters are used. - */ - linecont = ml_get_buf(wp->w_buffer, wp->w_cursor.lnum, FALSE); - empty_line = (*linecont == NUL); + /* Get line & check if empty (cursorpos will show "0-1"). Note that + * p will become invalid when getting another buffer line. */ + p = ml_get_buf(wp->w_buffer, wp->w_cursor.lnum, FALSE); + empty_line = (*p == NUL); + + /* Get the byte value now, in case we need it below. This is more + * efficient than making a copy of the line. */ + if (wp->w_cursor.col > (colnr_T)STRLEN(p)) + byteval = 0; + else +#ifdef FEAT_MBYTE + byteval = (*mb_ptr2char)(p + wp->w_cursor.col); +#else + byteval = p[wp->w_cursor.col]; +#endif groupdepth = 0; p = out; @@ -3956,16 +3965,7 @@ build_stl_str_hl(wp, out, outlen, fmt, u case STL_BYTEVAL_X: base = 'X'; case STL_BYTEVAL: - if (wp->w_cursor.col > (colnr_T)STRLEN(linecont)) - num = 0; - else - { -#ifdef FEAT_MBYTE - num = (*mb_ptr2char)(linecont + wp->w_cursor.col); -#else - num = linecont[wp->w_cursor.col]; -#endif - } + num = byteval; if (num == NL) num = 0; else if (num == CAR && get_fileformat(wp->w_buffer) == EOL_MAC) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 916, +/**/ 915, /**/ 914,