I'm still making progress on this, but fixed some crashes today that
may belong to libcss. The css_select__initialise_selection_state()
function initializes node_data->bloom with the parent's bloom filter:

  error = css__get_parent_bloom(parent, handler, pw,
                                &state->node_data->bloom);

But when "parent" is NULL, that function returns

  static css_bloom empty_bloom[CSS_BLOOM_SIZE];
  bloom = empty_bloom;
  *parent_bloom = bloom;
  return CSS_OK;

The matching call to css_select__finalise_selection_state() eventually
tries to free that data:

  if (state->node_data != NULL) {
    css__destroy_node_data(state->node_data);
  }

And that involves

  if (node_data->bloom != NULL) {
    free(node_data->bloom);
  }

So, ultimately, we try to free the static empty_bloom. This does not
work.

Since this only happens when "parent" is NULL, I can easily check for
that case and avoid calling css_select_style(). But is that the right
thing to do? Or is this a corner case that css_select_style() should
handle?
_______________________________________________
netsurf-dev mailing list -- netsurf-dev@netsurf-browser.org
To unsubscribe send an email to netsurf-dev-le...@netsurf-browser.org

Reply via email to