]> sjero.net Git - wget/commitdiff
Fixed crash while processing page with invalid `style' attribute.
authorIvanov Anton <x86mail@gmail.com>
Fri, 8 Oct 2010 11:39:36 +0000 (13:39 +0200)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Fri, 8 Oct 2010 11:39:36 +0000 (13:39 +0200)
src/ChangeLog
src/html-url.c

index c7eba319535fe40cde88b37678042a950b2085d0..8d15a17d335f81b504987a5e1b2c00dc89f4c10a 100644 (file)
@@ -1,3 +1,7 @@
+2010-10-08  Ivanov Anton <x86mail@gmail.com> (tiny change)
+
+    * src/html-url.c (check_style_attr): Skip quotes when they are present.
+
 2010-10-06  Giuseppe Scrivano  <gscrivano@gnu.org>
 
        * main.c (main): Remove unused variable `status'.
index 523f5e0dab1aa82f1431f7752be20742c356f4ec..54a0141c4533672c1c8c5de70d60acb6c6fa8d61 100644 (file)
@@ -364,12 +364,27 @@ static void
 check_style_attr (struct taginfo *tag, struct map_context *ctx)
 {
   int attrind;
+  int raw_start;
+  int raw_len;
   char *style = find_attr (tag, "style", &attrind);
   if (!style)
     return;
 
-  /* raw pos and raw size include the quotes, hence the +1 -2 */
-  get_urls_css (ctx, ATTR_POS(tag,attrind,ctx)+1, ATTR_SIZE(tag,attrind)-2);
+  /* raw pos and raw size include the quotes, skip them when they are
+     present.  */
+  raw_start = ATTR_POS (tag, attrind, ctx);
+  raw_len  = ATTR_SIZE (tag, attrind);
+  if( *(char *)(ctx->text + raw_start) == '\''
+      || *(char *)(ctx->text + raw_start) == '"')
+    {
+      raw_start += 1;
+      raw_len -= 2;
+    }
+
+  if(raw_len <= 0)
+       return;
+
+  get_urls_css (ctx, raw_start, raw_len);
 }
 
 /* All the tag_* functions are called from collect_tags_mapper, as