]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.1.0582: text properties are not enabled v8.1.0582
authorBram Moolenaar <Bram@vim.org>
Fri, 14 Dec 2018 11:18:11 +0000 (12:18 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 14 Dec 2018 11:18:11 +0000 (12:18 +0100)
Problem:    Text properties are not enabled.
Solution:   Fix sizeof argument and re-enable the text properties feature.
            Fix memory leak.

src/feature.h
src/textprop.c
src/version.c

index 404461cc63b5ada0d3a6dcf1015e5fe7cc542661..9615a9fa49e8767a7774bec00961616add2d93f0 100644 (file)
  * +textprop           Text properties
  */
 #if defined(FEAT_EVAL) && defined(FEAT_SYN_HL)
-// # define FEAT_TEXT_PROP
+# define FEAT_TEXT_PROP
 #endif
 
 /*
index fa28e8005228dbaac7e875554030b324e2562e1f..85d32475dc87477be7afb0a07d70658185afed80 100644 (file)
@@ -151,7 +151,7 @@ f_prop_add(typval_T *argvars, typval_T *rettv UNUSED)
     size_t     textlen;
     char_u     *props;
     char_u     *newprops;
-    static textprop_T  tmp_prop; // static to get it aligned.
+    textprop_T tmp_prop;
     int                i;
 
     lnum = get_tv_number(&argvars[0]);
@@ -212,8 +212,9 @@ f_prop_add(typval_T *argvars, typval_T *rettv UNUSED)
 
     // Fetch the line to get the ml_line_len field updated.
     proplen = get_text_props(buf, lnum, &props, TRUE);
+    textlen = buf->b_ml.ml_line_len - proplen * sizeof(textprop_T);
 
-    if (col >= (colnr_T)STRLEN(buf->b_ml.ml_line_ptr))
+    if (col >= (colnr_T)textlen - 1)
     {
        EMSGN(_(e_invalid_col), (long)col);
        return;
@@ -224,7 +225,6 @@ f_prop_add(typval_T *argvars, typval_T *rettv UNUSED)
     if (newtext == NULL)
        return;
     // Copy the text, including terminating NUL.
-    textlen = buf->b_ml.ml_line_len - proplen * sizeof(textprop_T);
     mch_memmove(newtext, buf->b_ml.ml_line_ptr, textlen);
 
     // Find the index where to insert the new property.
@@ -232,8 +232,8 @@ f_prop_add(typval_T *argvars, typval_T *rettv UNUSED)
     // text, we need to copy them as bytes before using it as a struct.
     for (i = 0; i < proplen; ++i)
     {
-       mch_memmove(&tmp_prop, props + i * sizeof(proptype_T),
-                                                          sizeof(proptype_T));
+       mch_memmove(&tmp_prop, props + i * sizeof(textprop_T),
+                                                          sizeof(textprop_T));
        if (tmp_prop.tp_col >= col)
            break;
     }
@@ -274,7 +274,7 @@ has_any_text_properties(buf_T *buf)
 }
 
 /*
- * Fetch the text properties for line "lnum" in buffer 'buf".
+ * Fetch the text properties for line "lnum" in buffer "buf".
  * Returns the number of text properties and, when non-zero, a pointer to the
  * first one in "props" (note that it is not aligned, therefore the char_u
  * pointer).
@@ -617,11 +617,13 @@ prop_type_set(typval_T *argvars, int add)
        {
            *htp = (hashtab_T *)alloc(sizeof(hashtab_T));
            if (*htp == NULL)
+           {
+               vim_free(prop);
                return;
+           }
            hash_init(*htp);
        }
-       hash_add(buf == NULL ? global_proptypes : buf->b_proptypes,
-                                                              PT2HIKEY(prop));
+       hash_add(*htp, PT2HIKEY(prop));
     }
     else
     {
@@ -640,7 +642,7 @@ prop_type_set(typval_T *argvars, int add)
            char_u      *highlight;
            int         hl_id = 0;
 
-           highlight = get_dict_string(dict, (char_u *)"highlight", TRUE);
+           highlight = get_dict_string(dict, (char_u *)"highlight", FALSE);
            if (highlight != NULL && *highlight != NUL)
                hl_id = syn_name2id(highlight);
            if (hl_id <= 0)
@@ -721,12 +723,14 @@ f_prop_type_delete(typval_T *argvars, typval_T *rettv UNUSED)
     if (hi != NULL)
     {
        hashtab_T       *ht;
+       proptype_T      *prop = HI2PT(hi);
 
        if (buf == NULL)
            ht = global_proptypes;
        else
            ht = buf->b_proptypes;
        hash_remove(ht, hi);
+       vim_free(prop);
     }
 }
 
@@ -846,7 +850,7 @@ clear_ht_prop_types(hashtab_T *ht)
 
 #if defined(EXITFREE) || defined(PROTO)
 /*
- * Free all property types for "buf".
+ * Free all global property types.
  */
     void
 clear_global_prop_types(void)
index 9a44976f0f3fd0e5b007cf2e1fd8be77ec081e24..a0ffd4e37214ba326fa85e74945d0d9ddf3843b4 100644 (file)
@@ -799,6 +799,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    582,
 /**/
     581,
 /**/