core: fix crash with hdata_update on shared strings, add hdata type "shared_string" (bug #41104)
parent
7dfaca9ef3
commit
846dde00aa
|
@ -11,6 +11,8 @@ http://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes]
|
|||
|
||||
== Version 0.4.3 (under dev)
|
||||
|
||||
* core: fix crash with hdata_update on shared strings, add hdata type
|
||||
"shared_string" (bug #41104)
|
||||
* core: add support of UTF-8 chars in horizontal/vertical separators (options
|
||||
weechat.look.separator_{horizontal|vertical})
|
||||
* core: add option weechat.look.window_auto_zoom, disable automatic zoom by
|
||||
|
|
|
@ -13015,6 +13015,7 @@ Arguments:
|
|||
** WEECHAT_HDATA_INTEGER
|
||||
** WEECHAT_HDATA_LONG
|
||||
** WEECHAT_HDATA_STRING
|
||||
** WEECHAT_HDATA_SHARED_STRING
|
||||
** WEECHAT_HDATA_POINTER
|
||||
** WEECHAT_HDATA_TIME
|
||||
** WEECHAT_HDATA_HASHTABLE
|
||||
|
@ -13262,6 +13263,9 @@ switch (type)
|
|||
case WEECHAT_HDATA_STRING:
|
||||
/* ... */
|
||||
break;
|
||||
case WEECHAT_HDATA_SHARED_STRING:
|
||||
/* ... */
|
||||
break;
|
||||
case WEECHAT_HDATA_POINTER:
|
||||
/* ... */
|
||||
break;
|
||||
|
|
|
@ -13250,6 +13250,7 @@ Paramètres :
|
|||
** WEECHAT_HDATA_INTEGER
|
||||
** WEECHAT_HDATA_LONG
|
||||
** WEECHAT_HDATA_STRING
|
||||
** WEECHAT_HDATA_SHARED_STRING
|
||||
** WEECHAT_HDATA_POINTER
|
||||
** WEECHAT_HDATA_TIME
|
||||
** WEECHAT_HDATA_HASHTABLE
|
||||
|
@ -13500,6 +13501,9 @@ switch (type)
|
|||
case WEECHAT_HDATA_STRING:
|
||||
/* ... */
|
||||
break;
|
||||
case WEECHAT_HDATA_SHARED_STRING:
|
||||
/* ... */
|
||||
break;
|
||||
case WEECHAT_HDATA_POINTER:
|
||||
/* ... */
|
||||
break;
|
||||
|
|
|
@ -13263,6 +13263,7 @@ Argomenti:
|
|||
** WEECHAT_HDATA_INTEGER
|
||||
** WEECHAT_HDATA_LONG
|
||||
** WEECHAT_HDATA_STRING
|
||||
** WEECHAT_HDATA_SHARED_STRING
|
||||
** WEECHAT_HDATA_POINTER
|
||||
** WEECHAT_HDATA_TIME
|
||||
** WEECHAT_HDATA_HASHTABLE
|
||||
|
@ -13513,6 +13514,9 @@ switch (type)
|
|||
case WEECHAT_HDATA_STRING:
|
||||
/* ... */
|
||||
break;
|
||||
case WEECHAT_HDATA_SHARED_STRING:
|
||||
/* ... */
|
||||
break;
|
||||
case WEECHAT_HDATA_POINTER:
|
||||
/* ... */
|
||||
break;
|
||||
|
|
|
@ -129,6 +129,7 @@ eval_hdata_get_value (struct t_hdata *hdata, void *pointer, const char *path)
|
|||
value = strdup (str_value);
|
||||
break;
|
||||
case WEECHAT_HDATA_STRING:
|
||||
case WEECHAT_HDATA_SHARED_STRING:
|
||||
ptr_value = hdata_string (hdata, pointer, var_name);
|
||||
value = (ptr_value) ? strdup (ptr_value) : NULL;
|
||||
break;
|
||||
|
|
|
@ -254,6 +254,7 @@ hdata_get_var_array_size (struct t_hdata *hdata, void *pointer,
|
|||
* types: string, pointer, hashtable)
|
||||
*/
|
||||
if ((var->type == WEECHAT_HDATA_STRING)
|
||||
|| (var->type == WEECHAT_HDATA_SHARED_STRING)
|
||||
|| (var->type == WEECHAT_HDATA_POINTER)
|
||||
|| (var->type == WEECHAT_HDATA_HASHTABLE))
|
||||
{
|
||||
|
@ -266,6 +267,7 @@ hdata_get_var_array_size (struct t_hdata *hdata, void *pointer,
|
|||
switch (var->type)
|
||||
{
|
||||
case WEECHAT_HDATA_STRING:
|
||||
case WEECHAT_HDATA_SHARED_STRING:
|
||||
ptr_value = (*((char ***)(pointer + var->offset)))[i];
|
||||
break;
|
||||
case WEECHAT_HDATA_POINTER:
|
||||
|
@ -836,6 +838,13 @@ hdata_set (struct t_hdata *hdata, void *pointer, const char *name,
|
|||
*ptr_string = (value) ? strdup (value) : NULL;
|
||||
return 1;
|
||||
break;
|
||||
case WEECHAT_HDATA_SHARED_STRING:
|
||||
ptr_string = (char **)(pointer + var->offset);
|
||||
if (*ptr_string)
|
||||
string_shared_free (*ptr_string);
|
||||
*ptr_string = (value) ? (char *)string_shared_get (value) : NULL;
|
||||
return 1;
|
||||
break;
|
||||
case WEECHAT_HDATA_POINTER:
|
||||
rc = sscanf (value, "%lx", &ptr);
|
||||
if ((rc != EOF) && (rc != 0))
|
||||
|
|
|
@ -1688,11 +1688,11 @@ gui_line_hdata_line_data_cb (void *data, const char *hdata_name)
|
|||
HDATA_VAR(struct t_gui_line_data, date_printed, TIME, 1, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, str_time, STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, tags_count, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, tags_array, STRING, 1, "tags_count", NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, tags_array, SHARED_STRING, 1, "tags_count", NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, displayed, CHAR, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, highlight, CHAR, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, refresh_needed, CHAR, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, prefix, STRING, 1, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, prefix, SHARED_STRING, 1, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, prefix_length, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_line_data, message, STRING, 1, NULL, NULL);
|
||||
}
|
||||
|
|
|
@ -1046,8 +1046,8 @@ gui_nicklist_hdata_nick_group_cb (void *data, const char *hdata_name)
|
|||
0, 0, NULL, NULL);
|
||||
if (hdata)
|
||||
{
|
||||
HDATA_VAR(struct t_gui_nick_group, name, STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick_group, color, STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick_group, name, SHARED_STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick_group, color, SHARED_STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick_group, visible, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick_group, level, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick_group, parent, POINTER, 0, NULL, hdata_name);
|
||||
|
@ -1078,10 +1078,10 @@ gui_nicklist_hdata_nick_cb (void *data, const char *hdata_name)
|
|||
if (hdata)
|
||||
{
|
||||
HDATA_VAR(struct t_gui_nick, group, POINTER, 0, NULL, "nick_group");
|
||||
HDATA_VAR(struct t_gui_nick, name, STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick, color, STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick, prefix, STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick, prefix_color, STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick, name, SHARED_STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick, color, SHARED_STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick, prefix, SHARED_STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick, prefix_color, SHARED_STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick, visible, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_nick, prev_nick, POINTER, 0, NULL, hdata_name);
|
||||
HDATA_VAR(struct t_gui_nick, next_nick, POINTER, 0, NULL, hdata_name);
|
||||
|
|
|
@ -433,6 +433,7 @@ relay_weechat_msg_add_hdata_path (struct t_relay_weechat_msg *msg,
|
|||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_LONG);
|
||||
break;
|
||||
case WEECHAT_HDATA_STRING:
|
||||
case WEECHAT_HDATA_SHARED_STRING:
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_STRING);
|
||||
break;
|
||||
case WEECHAT_HDATA_POINTER:
|
||||
|
@ -476,6 +477,7 @@ relay_weechat_msg_add_hdata_path (struct t_relay_weechat_msg *msg,
|
|||
name));
|
||||
break;
|
||||
case WEECHAT_HDATA_STRING:
|
||||
case WEECHAT_HDATA_SHARED_STRING:
|
||||
relay_weechat_msg_add_string (msg,
|
||||
weechat_hdata_string (hdata,
|
||||
pointer,
|
||||
|
@ -664,6 +666,7 @@ relay_weechat_msg_add_hdata (struct t_relay_weechat_msg *msg,
|
|||
strcat (keys_types, RELAY_WEECHAT_MSG_OBJ_LONG);
|
||||
break;
|
||||
case WEECHAT_HDATA_STRING:
|
||||
case WEECHAT_HDATA_SHARED_STRING:
|
||||
strcat (keys_types, RELAY_WEECHAT_MSG_OBJ_STRING);
|
||||
break;
|
||||
case WEECHAT_HDATA_POINTER:
|
||||
|
|
|
@ -56,7 +56,7 @@ struct timeval;
|
|||
* please change the date with current one; for a second change at same
|
||||
* date, increment the 01, otherwise please keep 01.
|
||||
*/
|
||||
#define WEECHAT_PLUGIN_API_VERSION "20130819-01"
|
||||
#define WEECHAT_PLUGIN_API_VERSION "20140105-01"
|
||||
|
||||
/* macros for defining plugin infos */
|
||||
#define WEECHAT_PLUGIN_NAME(__name) \
|
||||
|
@ -122,6 +122,7 @@ struct timeval;
|
|||
#define WEECHAT_HDATA_POINTER 5
|
||||
#define WEECHAT_HDATA_TIME 6
|
||||
#define WEECHAT_HDATA_HASHTABLE 7
|
||||
#define WEECHAT_HDATA_SHARED_STRING 8
|
||||
|
||||
/* buffer hotlist */
|
||||
#define WEECHAT_HOTLIST_LOW "0"
|
||||
|
|
Loading…
Reference in New Issue