StThemeNode: handle url() in inline styles better
non-absolute paths specified as url()'s in stylesheets are resolved to be relative to the location of the stylesheets they are in. Inline styles don't have physical styleshseets sitting on disk, which leads to a crash in the url resolving code. This commit ensures that we don't try to use the stylesheet associated with a url, if there isn't one to use. This commit doesn't try to handle relative paths in inline styles. It only prevents crashes when absolute paths are used. https://bugzilla.gnome.org/show_bug.cgi?id=636975
This commit is contained in:
parent
e562c863f7
commit
c648a5f117
@ -1617,9 +1617,16 @@ _st_theme_node_ensure_background (StThemeNode *node)
|
||||
}
|
||||
else if (term->type == TERM_URI)
|
||||
{
|
||||
CRStyleSheet *base_stylesheet;
|
||||
|
||||
if (decl->parent_statement != NULL)
|
||||
base_stylesheet = decl->parent_statement->parent_sheet;
|
||||
else
|
||||
base_stylesheet = NULL;
|
||||
|
||||
node->background_image = _st_theme_resolve_url (node->theme,
|
||||
decl->parent_statement->parent_sheet,
|
||||
term->content.str->stryng->str);
|
||||
base_stylesheet,
|
||||
term->content.str->stryng->str);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1669,9 +1676,16 @@ _st_theme_node_ensure_background (StThemeNode *node)
|
||||
|
||||
if (decl->value->type == TERM_URI)
|
||||
{
|
||||
CRStyleSheet *base_stylesheet;
|
||||
|
||||
if (decl->parent_statement != NULL)
|
||||
base_stylesheet = decl->parent_statement->parent_sheet;
|
||||
else
|
||||
base_stylesheet = NULL;
|
||||
|
||||
g_free (node->background_image);
|
||||
node->background_image = _st_theme_resolve_url (node->theme,
|
||||
decl->parent_statement->parent_sheet,
|
||||
base_stylesheet,
|
||||
decl->value->content.str->stryng->str);
|
||||
}
|
||||
else if (term_is_inherit (decl->value))
|
||||
@ -2455,6 +2469,7 @@ st_theme_node_get_border_image (StThemeNode *node)
|
||||
if (strcmp (decl->property->stryng->str, "border-image") == 0)
|
||||
{
|
||||
CRTerm *term = decl->value;
|
||||
CRStyleSheet *base_stylesheet;
|
||||
int borders[4];
|
||||
int n_borders = 0;
|
||||
int i;
|
||||
@ -2529,7 +2544,12 @@ st_theme_node_get_border_image (StThemeNode *node)
|
||||
break;
|
||||
}
|
||||
|
||||
filename = _st_theme_resolve_url (node->theme, decl->parent_statement->parent_sheet, url);
|
||||
if (decl->parent_statement != NULL)
|
||||
base_stylesheet = decl->parent_statement->parent_sheet;
|
||||
else
|
||||
base_stylesheet = NULL;
|
||||
|
||||
filename = _st_theme_resolve_url (node->theme, base_stylesheet, url);
|
||||
if (filename == NULL)
|
||||
goto next_property;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user