[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

darin darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:26:36 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit bf570ed4c633d407dfd2358e1d8c02d1cf2b8a83
Author: darin <darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Feb 28 23:10:18 2003 +0000

            Reviewed by Dave.
    
            - fixed some storage leaks; this code is still leaking when we run cvs-base
    
            * khtml/css/parser.y:
            (import): Use the new maybe_media_list (ported from KDE), and delete the
            media list if the current item we are parsing is not a style sheet.
            (maybe_media_list): Added. (ported from KDE).
            (media_list): Added error case so we don't leak in that case (ported from KDE).
            (media): Use media_list instead of media_list2 (ported from KDE).
            (selector_list): Added error case so we don't leak in that case (ported from KDE).
            (selector): Added error case so we don't leak in that case (ported from KDE).
            (simple_selector): Added nil-checking (ported from KDE).
            (element_name): Use 0xFFFF instead of -1 (ported from KDE).
            (specifier_list): Added error case so we don't leak in that case (ported from KDE).
            (declaration): Delete the expr if we don't use it because property is 0.
            (expr): Added error case so we don't leak in that case (ported from KDE).
    
            * khtml/css/cssparser.cpp:
            (CSSParser::parseSheet): Delete the rule in case one was created.
            (CSSParser::parseRule): Zero out the rule after extracting it to return.
            (CSSParser::parseValue): Delete the rule in case one was created.
            (CSSParser::parseDeclaration): Delete the rule in case one was created.
    
            * khtml/css/parser.cpp: Regenerated.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@3718 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index fb2953b..f104452 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,31 @@
+2003-02-28  Darin Adler  <darin at apple.com>
+
+        Reviewed by Dave.
+
+        - fixed some storage leaks; this code is still leaking when we run cvs-base
+
+        * khtml/css/parser.y:
+        (import): Use the new maybe_media_list (ported from KDE), and delete the
+        media list if the current item we are parsing is not a style sheet.
+        (maybe_media_list): Added. (ported from KDE).
+        (media_list): Added error case so we don't leak in that case (ported from KDE).
+        (media): Use media_list instead of media_list2 (ported from KDE).
+        (selector_list): Added error case so we don't leak in that case (ported from KDE).
+        (selector): Added error case so we don't leak in that case (ported from KDE).
+        (simple_selector): Added nil-checking (ported from KDE).
+        (element_name): Use 0xFFFF instead of -1 (ported from KDE).
+        (specifier_list): Added error case so we don't leak in that case (ported from KDE).
+        (declaration): Delete the expr if we don't use it because property is 0.
+        (expr): Added error case so we don't leak in that case (ported from KDE).
+
+        * khtml/css/cssparser.cpp:
+        (CSSParser::parseSheet): Delete the rule in case one was created.
+        (CSSParser::parseRule): Zero out the rule after extracting it to return.
+        (CSSParser::parseValue): Delete the rule in case one was created.
+        (CSSParser::parseDeclaration): Delete the rule in case one was created.
+
+        * khtml/css/parser.cpp: Regenerated.
+
 2003-02-28  David Hyatt  <hyatt at apple.com>
 
 	Fix for text-dec regression, 3185121.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index fb2953b..f104452 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,31 @@
+2003-02-28  Darin Adler  <darin at apple.com>
+
+        Reviewed by Dave.
+
+        - fixed some storage leaks; this code is still leaking when we run cvs-base
+
+        * khtml/css/parser.y:
+        (import): Use the new maybe_media_list (ported from KDE), and delete the
+        media list if the current item we are parsing is not a style sheet.
+        (maybe_media_list): Added. (ported from KDE).
+        (media_list): Added error case so we don't leak in that case (ported from KDE).
+        (media): Use media_list instead of media_list2 (ported from KDE).
+        (selector_list): Added error case so we don't leak in that case (ported from KDE).
+        (selector): Added error case so we don't leak in that case (ported from KDE).
+        (simple_selector): Added nil-checking (ported from KDE).
+        (element_name): Use 0xFFFF instead of -1 (ported from KDE).
+        (specifier_list): Added error case so we don't leak in that case (ported from KDE).
+        (declaration): Delete the expr if we don't use it because property is 0.
+        (expr): Added error case so we don't leak in that case (ported from KDE).
+
+        * khtml/css/cssparser.cpp:
+        (CSSParser::parseSheet): Delete the rule in case one was created.
+        (CSSParser::parseRule): Zero out the rule after extracting it to return.
+        (CSSParser::parseValue): Delete the rule in case one was created.
+        (CSSParser::parseDeclaration): Delete the rule in case one was created.
+
+        * khtml/css/parser.cpp: Regenerated.
+
 2003-02-28  David Hyatt  <hyatt at apple.com>
 
 	Fix for text-dec regression, 3185121.
diff --git a/WebCore/khtml/css/cssparser.cpp b/WebCore/khtml/css/cssparser.cpp
index b8c9819..2961d90 100644
--- a/WebCore/khtml/css/cssparser.cpp
+++ b/WebCore/khtml/css/cssparser.cpp
@@ -150,6 +150,9 @@ void CSSParser::parseSheet( CSSStyleSheetImpl *sheet, const DOMString &string )
 #ifdef CSS_DEBUG
     kdDebug( 6080 ) << "<<<<<<< done parsing style sheet" << endl;
 #endif
+
+    delete rule;
+    rule = 0;
 }
 
 CSSRuleImpl *CSSParser::parseRule( const DOM::DOMString &string )
@@ -170,12 +173,15 @@ CSSRuleImpl *CSSParser::parseRule( const DOM::DOMString &string )
     yytext = yy_c_buf_p = data;
     yy_hold_char = *yy_c_buf_p;
 
-
     CSSParser *old = currentParser;
     currentParser = this;
     cssyyparse( this );
     currentParser = old;
-    return rule;
+
+    CSSRuleImpl *result = rule;
+    rule = 0;
+    
+    return result;
 }
 
 bool CSSParser::parseValue( DOM::CSSStyleDeclarationImpl *declaration, int _id, const DOM::DOMString &string,
@@ -212,6 +218,9 @@ bool CSSParser::parseValue( DOM::CSSStyleDeclarationImpl *declaration, int _id,
     currentParser = this;
     cssyyparse( this );
     currentParser = old;
+    
+    delete rule;
+    rule = 0;
 
     bool ok = false;
     if ( numParsedProperties ) {
@@ -259,6 +268,9 @@ bool CSSParser::parseDeclaration( DOM::CSSStyleDeclarationImpl *declaration, con
     cssyyparse( this );
     currentParser = old;
 
+    delete rule;
+    rule = 0;
+
     bool ok = false;
     if ( numParsedProperties ) {
 	ok = true;
diff --git a/WebCore/khtml/css/parser.cpp b/WebCore/khtml/css/parser.cpp
index 4a4a867..6fdea62 100644
--- a/WebCore/khtml/css/parser.cpp
+++ b/WebCore/khtml/css/parser.cpp
@@ -284,20 +284,20 @@ static const short yyrhs[] = {    66,
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   225,   227,   228,   229,   232,   239,   245,   270,   272,   275,
-   277,   278,   281,   283,   288,   289,   292,   294,   305,   307,
-   317,   319,   320,   321,   322,   323,   326,   337,   340,   345,
-   347,   350,   354,   358,   365,   379,   384,   391,   393,   402,
-   424,   428,   433,   437,   442,   444,   445,   448,   450,   453,
-   473,   487,   503,   507,   524,   529,   533,   539,   560,   565,
-   570,   580,   587,   588,   589,   592,   601,   625,   631,   639,
-   643,   646,   649,   652,   655,   660,   662,   665,   671,   679,
-   683,   688,   691,   697,   705,   709,   715,   721,   726,   732,
-   740,   763,   770,   772,   775,   780,   793,   797,   800,   805,
-   807,   808,   809,   815,   816,   817,   819,   824,   826,   827,
-   828,   829,   830,   831,   832,   833,   834,   835,   836,   837,
-   838,   839,   840,   841,   842,   843,   847,   862,   869,   876,
-   884,   910,   912,   915,   917
+   225,   227,   228,   229,   232,   240,   246,   271,   273,   276,
+   278,   279,   282,   284,   289,   290,   293,   295,   306,   308,
+   318,   320,   321,   322,   323,   324,   327,   340,   343,   348,
+   350,   353,   357,   361,   368,   382,   387,   394,   396,   405,
+   427,   431,   436,   440,   445,   447,   448,   451,   453,   456,
+   476,   490,   506,   510,   527,   532,   536,   542,   563,   568,
+   573,   583,   590,   591,   592,   595,   604,   628,   634,   642,
+   646,   649,   652,   655,   658,   663,   665,   668,   674,   682,
+   686,   691,   694,   700,   708,   712,   718,   724,   729,   735,
+   743,   768,   775,   777,   780,   785,   798,   802,   805,   810,
+   812,   813,   814,   820,   821,   822,   824,   829,   831,   832,
+   833,   834,   835,   836,   837,   838,   839,   840,   841,   842,
+   843,   844,   845,   846,   847,   848,   852,   867,   874,   881,
+   889,   915,   917,   920,   922
 };
 #endif
 
@@ -1056,17 +1056,18 @@ case 5:
 #line 233 "parser.y"
 {
         CSSParser *p = static_cast<CSSParser *>(parser);
-	p->rule = yyvsp[-2].rule;
+	delete p->rule;
+        p->rule = yyvsp[-2].rule;
     ;
     break;}
 case 6:
-#line 240 "parser.y"
+#line 241 "parser.y"
 {
 	/* can be empty */
     ;
     break;}
 case 7:
-#line 246 "parser.y"
+#line 247 "parser.y"
 {
 	CSSParser *p = static_cast<CSSParser *>(parser);
 	if ( yyvsp[-1].valueList ) {
@@ -1091,7 +1092,7 @@ case 7:
     ;
     break;}
 case 14:
-#line 283 "parser.y"
+#line 284 "parser.y"
 {
 #ifdef CSS_DEBUG
      kdDebug( 6080 ) << "charset rule: " << qString(yyvsp[-2].string) << endl;
@@ -1099,7 +1100,7 @@ case 14:
  ;
     break;}
 case 18:
-#line 294 "parser.y"
+#line 295 "parser.y"
 {
      CSSParser *p = static_cast<CSSParser *>(parser);
      if ( yyvsp[-1].rule && p->styleElement && p->styleElement->isCSSStyleSheet() ) {
@@ -1110,7 +1111,7 @@ case 18:
  ;
     break;}
 case 20:
-#line 307 "parser.y"
+#line 308 "parser.y"
 {
      CSSParser *p = static_cast<CSSParser *>(parser);
      if ( yyvsp[-1].rule && p->styleElement && p->styleElement->isCSSStyleSheet() ) {
@@ -1121,7 +1122,7 @@ case 20:
  ;
     break;}
 case 27:
-#line 327 "parser.y"
+#line 328 "parser.y"
 {
 #ifdef CSS_DEBUG
 	kdDebug( 6080 ) << "@import: " << qString(yyvsp[-3].string) << endl;
@@ -1129,37 +1130,39 @@ case 27:
 	CSSParser *p = static_cast<CSSParser *>(parser);
 	if ( p->styleElement && p->styleElement->isCSSStyleSheet() )
 	    yyval.rule = new CSSImportRuleImpl( p->styleElement, domString(yyvsp[-3].string), yyvsp[-1].mediaList );
-	else
+	else {
 	    yyval.rule = 0;
+            delete yyvsp[-1].mediaList;
+        }
     ;
     break;}
 case 28:
-#line 337 "parser.y"
+#line 340 "parser.y"
 {
         yyval.rule = 0;
     ;
     break;}
 case 29:
-#line 340 "parser.y"
+#line 343 "parser.y"
 {
         yyval.rule = 0;
     ;
     break;}
 case 32:
-#line 351 "parser.y"
+#line 354 "parser.y"
 {
 	yyval.mediaList = 0;
     ;
     break;}
 case 33:
-#line 354 "parser.y"
+#line 357 "parser.y"
 {
 	yyval.mediaList = new MediaListImpl();
 	yyval.mediaList->appendMedium( domString(yyvsp[0].string) );
     ;
     break;}
 case 34:
-#line 358 "parser.y"
+#line 361 "parser.y"
 {
 	yyval.mediaList = yyvsp[-3].mediaList;
 	if ( !yyval.mediaList ) yyval.mediaList = new MediaListImpl();
@@ -1167,7 +1170,7 @@ case 34:
     ;
     break;}
 case 35:
-#line 366 "parser.y"
+#line 369 "parser.y"
 {
 	CSSParser *p = static_cast<CSSParser *>(parser);
 	if ( yyvsp[-4].mediaList && yyvsp[-1].ruleList &&
@@ -1181,25 +1184,25 @@ case 35:
     ;
     break;}
 case 36:
-#line 380 "parser.y"
+#line 383 "parser.y"
 {
 	yyval.mediaList = new MediaListImpl();
 	yyval.mediaList->appendMedium( domString(yyvsp[0].string) );
     ;
     break;}
 case 37:
-#line 384 "parser.y"
+#line 387 "parser.y"
 {
 	yyval.mediaList = yyvsp[-3].mediaList;
 	yyval.mediaList->appendMedium( domString(yyvsp[0].string) );
     ;
     break;}
 case 38:
-#line 392 "parser.y"
+#line 395 "parser.y"
 { yyval.ruleList = 0; ;
     break;}
 case 39:
-#line 393 "parser.y"
+#line 396 "parser.y"
 {
       yyval.ruleList = yyvsp[-2].ruleList;
       if ( yyvsp[-1].rule ) {
@@ -1209,57 +1212,57 @@ case 39:
   ;
     break;}
 case 40:
-#line 403 "parser.y"
+#line 406 "parser.y"
 {
       yyval.string = yyvsp[-1].string;
   ;
     break;}
 case 41:
-#line 425 "parser.y"
+#line 428 "parser.y"
 {
       yyval.rule = 0;
     ;
     break;}
 case 42:
-#line 428 "parser.y"
+#line 431 "parser.y"
 {
       yyval.rule = 0;
     ;
     break;}
 case 43:
-#line 434 "parser.y"
+#line 437 "parser.y"
 {
       yyval.rule = 0;
     ;
     break;}
 case 44:
-#line 437 "parser.y"
+#line 440 "parser.y"
 {
       yyval.rule = 0;
     ;
     break;}
 case 45:
-#line 443 "parser.y"
+#line 446 "parser.y"
 { yyval.relation = CSSSelector::Sibling; ;
     break;}
 case 46:
-#line 444 "parser.y"
+#line 447 "parser.y"
 { yyval.relation = CSSSelector::Child; ;
     break;}
 case 47:
-#line 445 "parser.y"
+#line 448 "parser.y"
 { yyval.relation = CSSSelector::Descendant; ;
     break;}
 case 48:
-#line 449 "parser.y"
+#line 452 "parser.y"
 { yyval.val = -1; ;
     break;}
 case 49:
-#line 450 "parser.y"
+#line 453 "parser.y"
 { yyval.val = 1; ;
     break;}
 case 50:
-#line 454 "parser.y"
+#line 457 "parser.y"
 {
 #ifdef CSS_DEBUG
 	kdDebug( 6080 ) << "got ruleset" << endl << "  selector:" << endl;
@@ -1279,7 +1282,7 @@ case 50:
     ;
     break;}
 case 51:
-#line 474 "parser.y"
+#line 477 "parser.y"
 {
 	if ( yyvsp[0].selector ) {
 	    yyval.selectorList = new QPtrList<CSSSelector>;
@@ -1295,7 +1298,7 @@ case 51:
     ;
     break;}
 case 52:
-#line 487 "parser.y"
+#line 490 "parser.y"
 {
 	yyval.selectorList = yyvsp[-3].selectorList;
 	if ( yyvsp[0].selector ) {
@@ -1312,13 +1315,13 @@ case 52:
     ;
     break;}
 case 53:
-#line 504 "parser.y"
+#line 507 "parser.y"
 {
 	yyval.selector = yyvsp[0].selector;
     ;
     break;}
 case 54:
-#line 507 "parser.y"
+#line 510 "parser.y"
 {
     	yyval.selector = yyvsp[0].selector;
         CSSSelector *end = yyvsp[0].selector;
@@ -1336,28 +1339,28 @@ DOM::DocumentImpl *doc = p->document();
     ;
     break;}
 case 55:
-#line 525 "parser.y"
+#line 528 "parser.y"
 {
 	yyval.selector = new CSSSelector();
 	yyval.selector->tag = yyvsp[-1].element;
     ;
     break;}
 case 56:
-#line 529 "parser.y"
+#line 532 "parser.y"
 {
 	yyval.selector = yyvsp[-1].selector;
 	yyval.selector->tag = yyvsp[-2].element;
     ;
     break;}
 case 57:
-#line 533 "parser.y"
+#line 536 "parser.y"
 {
 	yyval.selector = yyvsp[-1].selector;
 	yyval.selector->tag = -1;
     ;
     break;}
 case 58:
-#line 540 "parser.y"
+#line 543 "parser.y"
 {
 	CSSParser *p = static_cast<CSSParser *>(parser);
 	DOM::DocumentImpl *doc = p->document();
@@ -1380,20 +1383,20 @@ case 58:
     ;
     break;}
 case 59:
-#line 560 "parser.y"
+#line 563 "parser.y"
 {
 	yyval.element = -1;
     ;
     break;}
 case 60:
-#line 566 "parser.y"
+#line 569 "parser.y"
 {
 	yyval.selector = yyvsp[0].selector;
 	yyval.selector->nonCSSHint = static_cast<CSSParser *>(parser)->nonCSSHint;
     ;
     break;}
 case 61:
-#line 570 "parser.y"
+#line 573 "parser.y"
 {
 	yyval.selector = yyvsp[-1].selector;
         CSSSelector *end = yyvsp[-1].selector;
@@ -1404,7 +1407,7 @@ case 61:
     ;
     break;}
 case 62:
-#line 581 "parser.y"
+#line 584 "parser.y"
 {
 	yyval.selector = new CSSSelector();
 	yyval.selector->match = CSSSelector::Id;
@@ -1413,7 +1416,7 @@ case 62:
     ;
     break;}
 case 66:
-#line 593 "parser.y"
+#line 596 "parser.y"
 {
 	yyval.selector = new CSSSelector();
 	yyval.selector->match = CSSSelector::List;
@@ -1422,7 +1425,7 @@ case 66:
     ;
     break;}
 case 67:
-#line 602 "parser.y"
+#line 605 "parser.y"
 {
 	CSSParser *p = static_cast<CSSParser *>(parser);
 	DOM::DocumentImpl *doc = p->document();
@@ -1446,7 +1449,7 @@ case 67:
     ;
     break;}
 case 68:
-#line 626 "parser.y"
+#line 629 "parser.y"
 {
 	yyval.selector = new CSSSelector();
 	yyval.selector->attr = yyvsp[-1].attribute;
@@ -1454,7 +1457,7 @@ case 68:
     ;
     break;}
 case 69:
-#line 631 "parser.y"
+#line 634 "parser.y"
 {
 	yyval.selector = new CSSSelector();
 	yyval.selector->attr = yyvsp[-5].attribute;
@@ -1463,43 +1466,43 @@ case 69:
     ;
     break;}
 case 70:
-#line 640 "parser.y"
+#line 643 "parser.y"
 {
 	yyval.val = CSSSelector::Exact;
     ;
     break;}
 case 71:
-#line 643 "parser.y"
+#line 646 "parser.y"
 {
 	yyval.val = CSSSelector::List;
     ;
     break;}
 case 72:
-#line 646 "parser.y"
+#line 649 "parser.y"
 {
 	yyval.val = CSSSelector::Hyphen;
     ;
     break;}
 case 73:
-#line 649 "parser.y"
+#line 652 "parser.y"
 {
 	yyval.val = CSSSelector::Begin;
     ;
     break;}
 case 74:
-#line 652 "parser.y"
+#line 655 "parser.y"
 {
 	yyval.val = CSSSelector::End;
     ;
     break;}
 case 75:
-#line 655 "parser.y"
+#line 658 "parser.y"
 {
 	yyval.val = CSSSelector::Contain;
     ;
     break;}
 case 78:
-#line 666 "parser.y"
+#line 669 "parser.y"
 {
 	yyval.selector = new CSSSelector();
 	yyval.selector->match = CSSSelector::Pseudo;
@@ -1507,7 +1510,7 @@ case 78:
     ;
     break;}
 case 79:
-#line 671 "parser.y"
+#line 674 "parser.y"
 {
 	yyval.selector = new CSSSelector();
 	yyval.selector->match = CSSSelector::Pseudo;
@@ -1516,13 +1519,13 @@ case 79:
     ;
     break;}
 case 80:
-#line 680 "parser.y"
+#line 683 "parser.y"
 {
 	yyval.ok = yyvsp[0].ok;
     ;
     break;}
 case 81:
-#line 683 "parser.y"
+#line 686 "parser.y"
 {
 	yyval.ok = yyvsp[-1].ok;
 	if ( yyvsp[0].ok )
@@ -1530,13 +1533,13 @@ case 81:
     ;
     break;}
 case 82:
-#line 688 "parser.y"
+#line 691 "parser.y"
 {
 	yyval.ok = yyvsp[0].ok;
     ;
     break;}
 case 83:
-#line 691 "parser.y"
+#line 694 "parser.y"
 {
 	yyval.ok = false;
 #ifdef CSS_DEBUG
@@ -1545,7 +1548,7 @@ case 83:
     ;
     break;}
 case 84:
-#line 697 "parser.y"
+#line 700 "parser.y"
 {
 	yyval.ok = false;
 #ifdef CSS_DEBUG
@@ -1554,13 +1557,13 @@ case 84:
     ;
     break;}
 case 85:
-#line 706 "parser.y"
+#line 709 "parser.y"
 {
 	yyval.ok = yyvsp[-2].ok;
     ;
     break;}
 case 86:
-#line 709 "parser.y"
+#line 712 "parser.y"
 {
 	yyval.ok = false;
 #ifdef CSS_DEBUG
@@ -1569,7 +1572,7 @@ case 86:
     ;
     break;}
 case 87:
-#line 715 "parser.y"
+#line 718 "parser.y"
 {
 	yyval.ok = false;
 #ifdef CSS_DEBUG
@@ -1578,7 +1581,7 @@ case 87:
     ;
     break;}
 case 88:
-#line 721 "parser.y"
+#line 724 "parser.y"
 {
 	yyval.ok = yyvsp[-3].ok;
 	if ( yyvsp[-2].ok )
@@ -1586,7 +1589,7 @@ case 88:
     ;
     break;}
 case 89:
-#line 726 "parser.y"
+#line 729 "parser.y"
 {
 	yyval.ok = yyvsp[-3].ok;
 #ifdef CSS_DEBUG
@@ -1595,7 +1598,7 @@ case 89:
     ;
     break;}
 case 90:
-#line 732 "parser.y"
+#line 735 "parser.y"
 {
 	yyval.ok = yyvsp[-5].ok;
 #ifdef CSS_DEBUG
@@ -1604,7 +1607,7 @@ case 90:
     ;
     break;}
 case 91:
-#line 741 "parser.y"
+#line 744 "parser.y"
 {
 	yyval.ok = false;
 	CSSParser *p = static_cast<CSSParser *>(parser);
@@ -1621,35 +1624,37 @@ case 91:
 	    else
 		kdDebug( 6080 ) << "     couldn't parse value!" << endl;
 #endif
-	}
+	} else {
+            delete yyvsp[-1].valueList;
+        }
 	delete p->valueList;
 	p->valueList = 0;
     ;
     break;}
 case 92:
-#line 764 "parser.y"
+#line 769 "parser.y"
 {
 	QString str = qString(yyvsp[-1].string);
 	yyval.prop_id = getPropertyID( str.lower().latin1(), str.length() );
     ;
     break;}
 case 93:
-#line 771 "parser.y"
+#line 776 "parser.y"
 { yyval.b = true; ;
     break;}
 case 94:
-#line 772 "parser.y"
+#line 777 "parser.y"
 { yyval.b = false; ;
     break;}
 case 95:
-#line 776 "parser.y"
+#line 781 "parser.y"
 {
 	yyval.valueList = new ValueList;
 	yyval.valueList->addValue( yyvsp[0].value );
     ;
     break;}
 case 96:
-#line 780 "parser.y"
+#line 785 "parser.y"
 {
 	yyval.valueList = yyvsp[-2].valueList;
 	if ( yyvsp[-1].tok ) {
@@ -1663,37 +1668,37 @@ case 96:
     ;
     break;}
 case 97:
-#line 794 "parser.y"
+#line 799 "parser.y"
 {
 	yyval.tok = '/';
     ;
     break;}
 case 98:
-#line 797 "parser.y"
+#line 802 "parser.y"
 {
 	yyval.tok = ',';
     ;
     break;}
 case 99:
-#line 800 "parser.y"
+#line 805 "parser.y"
 {
         yyval.tok = 0;
   ;
     break;}
 case 100:
-#line 806 "parser.y"
+#line 811 "parser.y"
 { yyval.value = yyvsp[0].value; ;
     break;}
 case 101:
-#line 807 "parser.y"
+#line 812 "parser.y"
 { yyval.value = yyvsp[0].value; yyval.value.fValue *= yyvsp[-1].val; ;
     break;}
 case 102:
-#line 808 "parser.y"
+#line 813 "parser.y"
 { yyval.value.id = 0; yyval.value.string = yyvsp[-1].string; yyval.value.unit = CSSPrimitiveValue::CSS_STRING; ;
     break;}
 case 103:
-#line 809 "parser.y"
+#line 814 "parser.y"
 {
       QString str = qString( yyvsp[-1].string );
       yyval.value.id = getValueID( str.lower().latin1(), str.length() );
@@ -1702,101 +1707,101 @@ case 103:
   ;
     break;}
 case 104:
-#line 815 "parser.y"
+#line 820 "parser.y"
 { yyval.value.id = 0; yyval.value.string = yyvsp[-1].string; yyval.value.unit = CSSPrimitiveValue::CSS_URI; ;
     break;}
 case 105:
-#line 816 "parser.y"
+#line 821 "parser.y"
 { yyval.value.id = 0; yyval.value.iValue = 0; yyval.value.unit = CSSPrimitiveValue::CSS_UNKNOWN;/* ### */ ;
     break;}
 case 106:
-#line 817 "parser.y"
+#line 822 "parser.y"
 { yyval.value.id = 0; yyval.value.string = yyvsp[0].string; yyval.value.unit = CSSPrimitiveValue::CSS_RGBCOLOR; ;
     break;}
 case 107:
-#line 819 "parser.y"
+#line 824 "parser.y"
 {
       yyval.value = yyvsp[0].value;
   ;
     break;}
 case 108:
-#line 825 "parser.y"
+#line 830 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_NUMBER; ;
     break;}
 case 109:
-#line 826 "parser.y"
+#line 831 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PERCENTAGE; ;
     break;}
 case 110:
-#line 827 "parser.y"
+#line 832 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PX; ;
     break;}
 case 111:
-#line 828 "parser.y"
+#line 833 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_CM; ;
     break;}
 case 112:
-#line 829 "parser.y"
+#line 834 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_MM; ;
     break;}
 case 113:
-#line 830 "parser.y"
+#line 835 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_IN; ;
     break;}
 case 114:
-#line 831 "parser.y"
+#line 836 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PT; ;
     break;}
 case 115:
-#line 832 "parser.y"
+#line 837 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PC; ;
     break;}
 case 116:
-#line 833 "parser.y"
+#line 838 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_DEG; ;
     break;}
 case 117:
-#line 834 "parser.y"
+#line 839 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_RAD; ;
     break;}
 case 118:
-#line 835 "parser.y"
+#line 840 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_GRAD; ;
     break;}
 case 119:
-#line 836 "parser.y"
+#line 841 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_MS; ;
     break;}
 case 120:
-#line 837 "parser.y"
+#line 842 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_S; ;
     break;}
 case 121:
-#line 838 "parser.y"
+#line 843 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_HZ; ;
     break;}
 case 122:
-#line 839 "parser.y"
+#line 844 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_KHZ; ;
     break;}
 case 123:
-#line 840 "parser.y"
+#line 845 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_EMS; ;
     break;}
 case 124:
-#line 841 "parser.y"
+#line 846 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = Value::Q_EMS; ;
     break;}
 case 125:
-#line 842 "parser.y"
+#line 847 "parser.y"
 { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_EXS; ;
     break;}
 case 126:
-#line 843 "parser.y"
+#line 848 "parser.y"
 { yyval.value.id = 0; yyval.value.string = yyvsp[-1].string; yyval.value.unit = CSSPrimitiveValue::CSS_DIMENSION ;
     break;}
 case 127:
-#line 848 "parser.y"
+#line 853 "parser.y"
 {
       Function *f = new Function;
       f->name = yyvsp[-4].string;
@@ -1807,11 +1812,11 @@ case 127:
   ;
     break;}
 case 128:
-#line 863 "parser.y"
+#line 868 "parser.y"
 { yyval.string = yyvsp[-1].string; ;
     break;}
 case 129:
-#line 870 "parser.y"
+#line 875 "parser.y"
 {
 	yyval.rule = 0;
 #ifdef CSS_DEBUG
@@ -1820,7 +1825,7 @@ case 129:
     ;
     break;}
 case 130:
-#line 876 "parser.y"
+#line 881 "parser.y"
 {
 	yyval.rule = 0;
 #ifdef CSS_DEBUG
@@ -1829,7 +1834,7 @@ case 130:
     ;
     break;}
 case 131:
-#line 885 "parser.y"
+#line 890 "parser.y"
 {
 	yyval.rule = 0;
 #ifdef CSS_DEBUG
@@ -2059,6 +2064,6 @@ yyerrhandle:
     }
   return 1;
 }
-#line 920 "parser.y"
+#line 925 "parser.y"
 
 
diff --git a/WebCore/khtml/css/parser.y b/WebCore/khtml/css/parser.y
index 0ec81fd..9f1b433 100644
--- a/WebCore/khtml/css/parser.y
+++ b/WebCore/khtml/css/parser.y
@@ -186,7 +186,7 @@ static int cssyylex( YYSTYPE *yylval ) {
 %type <string> hexcolor
 
 %type <mediaList> media_list
-%type <mediaList> media_list2
+%type <mediaList> maybe_media_list
 
 %type <ruleList> ruleset_list
 
@@ -232,7 +232,7 @@ stylesheet:
 konq_rule:
     KONQ_RULE_SYM '{' maybe_space ruleset maybe_space '}' {
         CSSParser *p = static_cast<CSSParser *>(parser);
-	p->rule = $4;
+        p->rule = $4;
     }
 ;
 
@@ -324,15 +324,17 @@ rule:
     ;
 
 import:
-    IMPORT_SYM maybe_space string_or_uri maybe_space media_list ';' {
+    IMPORT_SYM maybe_space string_or_uri maybe_space maybe_media_list ';' {
 #ifdef CSS_DEBUG
 	kdDebug( 6080 ) << "@import: " << qString($3) << endl;
 #endif
 	CSSParser *p = static_cast<CSSParser *>(parser);
 	if ( p->styleElement && p->styleElement->isCSSStyleSheet() )
 	    $$ = new CSSImportRuleImpl( p->styleElement, domString($3), $5 );
-	else
+	else {
 	    $$ = 0;
+            delete $5;
+        }
     }
   | IMPORT_SYM error invalid_block {
         $$ = 0;
@@ -347,6 +349,14 @@ string_or_uri:
   | URI
     ;
 
+maybe_media_list
+     /* empty */ {
+        $$ = 0;
+     }
+     | media_list
+;
+
+
 media_list:
     /* empty */ {
 	$$ = 0;
@@ -357,13 +367,16 @@ media_list:
     }
     | media_list ',' maybe_space medium {
 	$$ = $1;
-	if ( !$$ ) $$ = new MediaListImpl();
 	$$->appendMedium( domString($4) );
     }
-;
+    | media_list error {
+        delete $1;
+        $$ = 0;
+    }
+    ;
 
 media:
-    MEDIA_SYM maybe_space media_list2 '{' maybe_space ruleset_list '}' {
+    MEDIA_SYM maybe_space media_list '{' maybe_space ruleset_list '}' {
 	CSSParser *p = static_cast<CSSParser *>(parser);
 	if ( $3 && $6 &&
 	     p->styleElement && p->styleElement->isCSSStyleSheet() ) {
@@ -376,18 +389,6 @@ media:
     }
   ;
 
-media_list2:
-    medium {
-	$$ = new MediaListImpl();
-	$$->appendMedium( domString($1) );
-    }
-    | media_list ',' maybe_space medium {
-	$$ = $1;
-	$$->appendMedium( domString($4) );
-    }
-    ;
-
-
 ruleset_list:
     /* empty */ { $$ = 0; }
   | ruleset_list ruleset maybe_space {
@@ -485,18 +486,22 @@ selector_list:
 	}
     }
     | selector_list ',' maybe_space selector {
-	$$ = $1;
-	if ( $4 ) {
-	    if ( !$$ ) {
-                $$ = new QPtrList<CSSSelector>;
-                $$->setAutoDelete(true);
-            }
+	if ( $1 && $4 ) {
+	    $$ = $1;
 	    $$->append( $4 );
 #ifdef CSS_DEBUG
 	    kdDebug( 6080 ) << "   got simple selector:" << endl;
 	    $4->print();
 #endif
-	}
+	} else {
+            delete $1;
+            delete $4;
+            $$ = 0;
+        }
+    }
+  | selector_list error {
+        delete $1;
+        $$ = 0;
     }
    ;
 
@@ -519,6 +524,10 @@ DOM::DocumentImpl *doc = p->document();
                 doc->setUsesDescendantRules(true);
         }
     }
+    | selector error {
+        delete $1;
+        $$ = 0;
+    }
     ;
 
 simple_selector:
@@ -528,11 +537,13 @@ simple_selector:
     }
     | element_name specifier_list maybe_space {
 	$$ = $2;
-	$$->tag = $1;
+	if ( $$ )
+            $$->tag = $1;
     }
     | specifier_list maybe_space {
 	$$ = $1;
-	$$->tag = -1;
+	if ( $$ )
+            $$->tag = 0xffffffff;
     }
   ;
 
@@ -558,7 +569,7 @@ element_name:
 	}
     }
     | '*' {
-	$$ = -1;
+	$$ = 0xffff;
     }
   ;
 
@@ -575,6 +586,10 @@ specifier_list:
         end->relation = CSSSelector::SubSelector;
         end->tagHistory = $2;
     }
+    | specifier_list error {
+        delete $1;
+        $$ = 0;
+    }
 ;
 
 specifier:
@@ -754,7 +769,9 @@ declaration:
 	    else
 		kdDebug( 6080 ) << "     couldn't parse value!" << endl;
 #endif
-	}
+	} else {
+            delete $4;
+        }
 	delete p->valueList;
 	p->valueList = 0;
     }
@@ -778,15 +795,21 @@ expr:
 	$$->addValue( $1 );
     }
     | expr operator term {
-	$$ = $1;
-	if ( $2 ) {
-	    Value v;
-	    v.id = 0;
-	    v.unit = Value::Operator;
-	    v.iValue = $2;
-	    $$->addValue( v );
-	}
-	$$->addValue( $3 );
+        $$ = $1;
+	if ( $$ ) {
+            if ( $2 ) {
+                Value v;
+                v.id = 0;
+                v.unit = Value::Operator;
+                v.iValue = $2;
+                $$->addValue( v );
+            }
+            $$->addValue( $3 );
+        }
+    }
+    | expr error {
+        delete $1;
+        $$ = 0;
     }
   ;
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list