diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2004-06-11 12:51:40 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2004-06-11 12:51:40 +0000 |
commit | e93271501092ea328e2163a4d3c4f348e48ca572 (patch) | |
tree | c65add4d779d8b4f3ada24de8180d76440caba6d /css | |
parent | 0efd285302797848b7bec0f5dad95aa043e9aa1b (diff) | |
download | netsurf-e93271501092ea328e2163a4d3c4f348e48ca572.tar.gz netsurf-e93271501092ea328e2163a4d3c4f348e48ca572.tar.bz2 |
[project @ 2004-06-11 12:51:40 by jmb]
Fix for crash caused by inline style attributes specifying background images.
svn path=/import/netsurf/; revision=961
Diffstat (limited to 'css')
-rw-r--r-- | css/css.c | 6 | ||||
-rw-r--r-- | css/css.h | 3 | ||||
-rw-r--r-- | css/ruleset.c | 8 |
3 files changed, 13 insertions, 4 deletions
@@ -883,11 +883,13 @@ bool css_match_detail(const struct css_selector *detail, /** * Parse a stand-alone CSS property list. * + * \param c parent content * \param style css_style to update * \param str property list, as found in HTML style attributes */ -void css_parse_property_list(struct css_style * style, char * str) +void css_parse_property_list(struct content *c, struct css_style * style, + char * str) { unsigned char *source_data; unsigned char *current, *end, *token_text; @@ -895,7 +897,7 @@ void css_parse_property_list(struct css_style * style, char * str) unsigned int i; int token; void *parser; - struct css_parser_params param = {true, 0, 0, false, false}; + struct css_parser_params param = {true, c, 0, false, false}; struct css_parser_token token_data; const struct css_parser_token token_start = { "{", 1 }; const struct css_parser_token token_end = { "}", 1 }; @@ -348,7 +348,8 @@ void css_cascade(struct css_style * const style, const struct css_style * const apply); void css_merge(struct css_style * const style, const struct css_style * const apply); -void css_parse_property_list(struct css_style * style, char * str); +void css_parse_property_list(struct content *c, struct css_style * style, + char * str); colour named_colour(const char *name); void css_dump_style(const struct css_style * const style); void css_dump_stylesheet(const struct css_stylesheet * stylesheet); diff --git a/css/ruleset.c b/css/ruleset.c index 345b86225..a3d43c679 100644 --- a/css/ruleset.c +++ b/css/ruleset.c @@ -539,7 +539,13 @@ void parse_background_image(struct css_style * const s, const struct css_node * else *(t + 1) = 0; - s->background_image.uri = url_join(url, v->stylesheet->url); + /* for inline style attributes, the stylesheet + * content is the parent HTML content + */ + if (v->stylesheet->type == CONTENT_HTML) + s->background_image.uri = url_join(url, v->stylesheet->data.html.base_url); + else + s->background_image.uri = url_join(url, v->stylesheet->url); free(url); if (!s->background_image.uri) return; s->background_image.type = CSS_BACKGROUND_IMAGE_URI; |