[Swfdec] libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_text_field_movie_html.c
Pekka Lampila
medar at kemper.freedesktop.org
Thu Nov 1 07:36:05 PDT 2007
libswfdec/swfdec_text_field_movie.c | 18 +++++++++++++++++
libswfdec/swfdec_text_field_movie_html.c | 32 +++++++++++++++++--------------
2 files changed, 36 insertions(+), 14 deletions(-)
New commits:
commit e1f14212d5a236453dd64426cfde8e6646b526d7
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu Nov 1 16:32:52 2007 +0200
Don't crash in TextField when swfdec_text_format_new or _copy return NULL
diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index 4dd9c07..5d499b2 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -1063,6 +1063,10 @@ swfdec_text_field_movie_set_text_format (SwfdecTextFieldMovie *text,
findex_new = g_new (SwfdecFormatIndex, 1);
findex_new->index_ = end_index;
findex_new->format = swfdec_text_format_copy (findex->format);
+ if (findex_new->format == NULL) {
+ g_free (findex_new);
+ break;
+ }
iter = g_slist_insert (iter, findex_new, 1);
}
@@ -1071,6 +1075,10 @@ swfdec_text_field_movie_set_text_format (SwfdecTextFieldMovie *text,
findex_new = g_new (SwfdecFormatIndex, 1);
findex_new->index_ = start_index;
findex_new->format = swfdec_text_format_copy (findex->format);
+ if (findex_new->format == NULL) {
+ g_free (findex_new);
+ break;
+ }
swfdec_text_format_add (findex_new->format, format);
iter = g_slist_insert (iter, findex_new, 1);
@@ -1352,6 +1360,11 @@ swfdec_text_field_movie_set_text (SwfdecTextFieldMovie *text, const char *str,
g_return_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text));
g_return_if_fail (str != NULL);
+ if (text->format_new == NULL) {
+ text->input = g_string_truncate (text->input, 0);
+ return;
+ }
+
// remove old formatting info
iter = text->formats;
while (iter) {
@@ -1368,6 +1381,11 @@ swfdec_text_field_movie_set_text (SwfdecTextFieldMovie *text, const char *str,
block->index_ = 0;
g_assert (SWFDEC_IS_TEXT_FORMAT (text->format_new));
block->format = swfdec_text_format_copy (text->format_new);
+ if (block->format == NULL) {
+ g_free (block);
+ text->input = g_string_truncate (text->input, 0);
+ return;
+ }
text->formats = g_slist_prepend (text->formats, block);
text->input_html = html;
diff --git a/libswfdec/swfdec_text_field_movie_html.c b/libswfdec/swfdec_text_field_movie_html.c
index ef22415..ba60530 100644
--- a/libswfdec/swfdec_text_field_movie_html.c
+++ b/libswfdec/swfdec_text_field_movie_html.c
@@ -352,19 +352,23 @@ swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p)
data->tags_open = g_slist_prepend (data->tags_open, tag);
// set format based on tag
- object = SWFDEC_AS_OBJECT (tag->format);
- SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE);
-
- if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) {
- swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bullet, &val);
- } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "b", 1)) {
- swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bold, &val);
- } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "i", 1)) {
- swfdec_as_object_set_variable (object, SWFDEC_AS_STR_italic, &val);
- } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "u", 1)) {
- swfdec_as_object_set_variable (object, SWFDEC_AS_STR_underline, &val);
- } else if (tag->name_length == 3 && !g_strncasecmp (tag->name, "img", 3)) {
- SWFDEC_FIXME ("IMG tag support for TextField's HTML input missing");
+ if (tag->format != NULL) {
+ object = SWFDEC_AS_OBJECT (tag->format);
+ SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE);
+
+ if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) {
+ swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bullet, &val);
+ } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "b", 1)) {
+ swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bold, &val);
+ } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "i", 1)) {
+ swfdec_as_object_set_variable (object, SWFDEC_AS_STR_italic, &val);
+ } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "u", 1)) {
+ swfdec_as_object_set_variable (object, SWFDEC_AS_STR_underline, &val);
+ }
+ else if (tag->name_length == 3 && !g_strncasecmp (tag->name, "img", 3))
+ {
+ SWFDEC_FIXME ("IMG tag support for TextField's HTML input missing");
+ }
}
if (data->style_sheet &&
@@ -478,7 +482,7 @@ swfdec_text_field_movie_html_parse (SwfdecTextFieldMovie *text, const char *str)
while (data.tags_closed != NULL) {
ParserTag *tag = (ParserTag *)data.tags_closed->data;
- if (tag->index != tag->end_index) {
+ if (tag->index != tag->end_index && tag->format != NULL) {
swfdec_text_field_movie_set_text_format (text, tag->format, tag->index,
tag->end_index);
}
More information about the Swfdec
mailing list