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--