Bug 42871

Summary: Cannot escape Id-value in SVG animation timing attributes
Product: WebKit Reporter: pipian
Component: SVGAssignee: Nobody <webkit-unassigned>
Status: NEW ---    
Severity: Normal CC: ahmad.saleem792, ap, cdumez, graouts, rniwa, sabouhallawa, webkit-bug-importer, zalan, zimmermann
Priority: P2 Keywords: InRadar
Version: 528+ (Nightly build)   
Hardware: Mac (Intel)   
OS: OS X 10.6   
Attachments:
Description Flags
Test case none

Description pipian 2010-07-22 21:56:48 PDT
Created attachment 62381 [details]
Test case

The SVG spec states that <a href="http://www.w3.org/TR/SVG/animate.html#TimingAttributes">Id-values may be used as parts of certain kinds of timing values</a> on SVG animation elements (such as syncbase-values used for the begin and end attributes) and references the SMIL Animation spec for normativity.  The SMIL Animation spec states that, as XML IDs are permitted to have the dot (.) separator, <a href="http://www.w3.org/TR/2001/REC-smil-animation-20010904/#TimingAttrValGrammars">identifiers may be escaped with the backslash</a>.  Webkit currently does not support escaping dot characters in timing values, however.

The attached file provides a simple example in which a filled path should slowly change from black to red over 3 seconds.  A second animate element has been added to begin 3 seconds after the end of the first animation and should fade the fill back to black by referencing the first animation, whose ID has been properly escaped in the begin attribute.  Batik correctly performs both animations.  Webkit only performs the first.

This should be a pretty quick fix in SVGSMILElement.cpp (SVGSMILElement::parseCondition).
Comment 1 Ahmad Saleem 2022-05-31 12:46:09 PDT
I am able to reproduce this bug in Safari 15.5 on macOS 12.4 and Technical Preview 146. It is also reproducible in Chrome Canary 104.

Only in Firefox Nightly 102, the black box animation have second loop to go back to black after three seconds.

Thanks!
Comment 2 Radar WebKit Bug Importer 2022-06-01 19:05:41 PDT
<rdar://problem/94260935>
Comment 3 Ahmad Saleem 2022-06-14 17:08:50 PDT
Just for reference:

Webkit File - https://github.com/WebKit/WebKit/blob/main/Source/WebCore/svg/animation/SVGSMILElement.cpp#L377

In Firefox Source Code - how they are doing "escaping dot".

https://searchfox.org/mozilla-central/source/dom/smil/SMILParserUtils.cpp#251