mirror of
https://github.com/weechat/weechat.git
synced 2026-06-28 22:06:38 +02:00
core: fix crash with hdata_update on shared strings, add hdata type "shared_string" (bug #41104)
This commit is contained in:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user