css parser crash fix

David Hyatt khtml-devel@kde.org
Mon, 3 Mar 2003 16:40:09 -0800


--Apple-Mail-4--288266859
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=US-ASCII;
	format=flowed

You'll want this.  Happens when dynamically inserting rules (the 
styleElement var of the parser wasn't initialized).  The site that 
crashed was thomsonfn.com.


--Apple-Mail-4--288266859
Content-Disposition: attachment;
	filename=patch.txt
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	x-unix-mode=0644;
	name="patch.txt"

Index: khtml/css/css_ruleimpl.cpp
===================================================================
RCS file: /local/home/cvs/Labyrinth/WebCore/khtml/css/css_ruleimpl.cpp,v
retrieving revision 1.10
diff -u -p -r1.10 khtml/css/css_ruleimpl.cpp
--- khtml/css/css_ruleimpl.cpp	2003/02/25 20:00:15	1.10
+++ khtml/css/css_ruleimpl.cpp	2003/03/04 00:36:07
@@ -238,7 +238,7 @@ unsigned long CSSMediaRuleImpl::insertRu
                                             unsigned long index )
 {
     CSSParser p( strictParsing );
-    CSSRuleImpl *newRule = p.parseRule( rule );
+    CSSRuleImpl *newRule = p.parseRule( parentStyleSheet(), rule );
 
     return newRule ? m_lstCSSRules->insertRule( newRule, index ) : 0;
 }
Index: khtml/css/css_stylesheetimpl.cpp
===================================================================
RCS file: /local/home/cvs/Labyrinth/WebCore/khtml/css/css_stylesheetimpl.cpp,v
retrieving revision 1.5
diff -u -p -r1.5 khtml/css/css_stylesheetimpl.cpp
--- khtml/css/css_stylesheetimpl.cpp	2003/02/25 20:00:15	1.5
+++ khtml/css/css_stylesheetimpl.cpp	2003/03/04 00:36:08
@@ -166,7 +166,7 @@ unsigned long CSSStyleSheetImpl::insertR
         return 0;
     }
     CSSParser p( strictParsing );
-    CSSRuleImpl *r = p.parseRule( rule );
+    CSSRuleImpl *r = p.parseRule( this, rule );
 
     if(!r) {
         exceptioncode = CSSException::SYNTAX_ERR + CSSException::_EXCEPTION_OFFSET;
Index: khtml/css/cssparser.cpp
===================================================================
RCS file: /local/home/cvs/Labyrinth/WebCore/khtml/css/cssparser.cpp,v
retrieving revision 1.27
diff -u -p -r1.27 khtml/css/cssparser.cpp
--- khtml/css/cssparser.cpp	2003/03/03 23:15:09	1.27
+++ khtml/css/cssparser.cpp	2003/03/04 00:36:10
@@ -155,8 +155,10 @@ void CSSParser::parseSheet( CSSStyleShee
     rule = 0;
 }
 
-CSSRuleImpl *CSSParser::parseRule( const DOM::DOMString &string )
+CSSRuleImpl *CSSParser::parseRule( DOM::CSSStyleSheetImpl *sheet, const DOM::DOMString &string )
 {
+    styleElement = sheet;
+    
     const char konq_rule[] = "@-konq-rule{";
     int length = string.length() + 4 + strlen(konq_rule);
     data = (unsigned short *)malloc( length *sizeof( unsigned short ) );
Index: khtml/css/cssparser.h
===================================================================
RCS file: /local/home/cvs/Labyrinth/WebCore/khtml/css/cssparser.h,v
retrieving revision 1.13
diff -u -p -r1.13 khtml/css/cssparser.h
--- khtml/css/cssparser.h	2003/02/25 20:00:15	1.13
+++ khtml/css/cssparser.h	2003/03/04 00:36:10
@@ -97,7 +97,7 @@ namespace DOM {
 	~CSSParser();
 
 	void parseSheet( DOM::CSSStyleSheetImpl *sheet, const DOM::DOMString &string );
-	DOM::CSSRuleImpl *parseRule( const DOM::DOMString &string );
+	DOM::CSSRuleImpl *parseRule( DOM::CSSStyleSheetImpl *sheet, const DOM::DOMString &string );
 	bool parseValue( DOM::CSSStyleDeclarationImpl *decls, int id, const DOM::DOMString &string,
 			 bool _important, bool _nonCSSHint );
 	bool parseDeclaration( DOM::CSSStyleDeclarationImpl *decls, const DOM::DOMString &string,

--Apple-Mail-4--288266859
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=US-ASCII;
	format=flowed




--Apple-Mail-4--288266859--