cssselector: Fix max_selector usage

Reverts 2ae8ace784 other than code style
fixes.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3100
This commit is contained in:
Alexander Mikhaylenko 2021-05-03 14:41:15 +05:00
parent 40ebed3a03
commit f3633d46ca

View File

@ -2102,7 +2102,6 @@ subdivide_infos (GByteArray *array,
guint n_infos, guint n_infos,
gint32 parent_offset) gint32 parent_offset)
{ {
const GtkCssSelector *max_selector = NULL;
GtkCssSelectorRuleSetInfo **matched_infos; GtkCssSelectorRuleSetInfo **matched_infos;
guint n_matched = 0; guint n_matched = 0;
GtkCssSelectorRuleSetInfo **remaining_infos; GtkCssSelectorRuleSetInfo **remaining_infos;
@ -2110,6 +2109,7 @@ subdivide_infos (GByteArray *array,
GHashTable *ht; GHashTable *ht;
gint32 tree_offset; gint32 tree_offset;
GtkCssSelectorTree *tree; GtkCssSelectorTree *tree;
GtkCssSelector max_selector;
GHashTableIter iter; GHashTableIter iter;
guint max_count; guint max_count;
gpointer key, value; gpointer key, value;
@ -2139,16 +2139,16 @@ subdivide_infos (GByteArray *array,
GtkCssSelector *selector = key; GtkCssSelector *selector = key;
if (GPOINTER_TO_UINT (value) > max_count || if (GPOINTER_TO_UINT (value) > max_count ||
(GPOINTER_TO_UINT (value) == max_count && (GPOINTER_TO_UINT (value) == max_count &&
gtk_css_selector_compare_one (selector, max_selector) < 0)) gtk_css_selector_compare_one (selector, &max_selector) < 0))
{ {
max_count = GPOINTER_TO_UINT (value); max_count = GPOINTER_TO_UINT (value);
max_selector = selector; max_selector = *selector;
} }
} }
tree = alloc_tree (array, &tree_offset); tree = alloc_tree (array, &tree_offset);
tree->parent_offset = parent_offset; tree->parent_offset = parent_offset;
tree->selector = *max_selector; tree->selector = max_selector;
/* Allocate maximum for both of them */ /* Allocate maximum for both of them */
/* TODO: Potentially dangerous? */ /* TODO: Potentially dangerous? */
@ -2160,9 +2160,9 @@ subdivide_infos (GByteArray *array,
{ {
GtkCssSelectorRuleSetInfo *info = infos[i]; GtkCssSelectorRuleSetInfo *info = infos[i];
if (gtk_css_selectors_has_initial_selector (info->current_selector, max_selector)) if (gtk_css_selectors_has_initial_selector (info->current_selector, &max_selector))
{ {
info->current_selector = gtk_css_selectors_skip_initial_selector (info->current_selector, max_selector); info->current_selector = gtk_css_selectors_skip_initial_selector (info->current_selector, &max_selector);
if (info->current_selector == NULL) if (info->current_selector == NULL)
{ {
/* Matches current node */ /* Matches current node */