<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>158112</bug_id>
          
          <creation_ts>2016-05-26 00:08:11 -0700</creation_ts>
          <short_desc>[Font Loading] Allow empty strings in FontFace constructor</short_desc>
          <delta_ts>2016-05-27 10:25:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1196668</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-26 00:08:11 -0700</bug_when>
    <thetext>[Font Loading] Allow empty strings in FontFace constructor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196669</commentid>
    <comment_count>1</comment_count>
      <attachid>279871</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-26 00:09:44 -0700</bug_when>
    <thetext>Created attachment 279871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196745</commentid>
    <comment_count>2</comment_count>
      <attachid>279871</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-26 09:18:42 -0700</bug_when>
    <thetext>Comment on attachment 279871
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=279871&amp;action=review

Seems like half of this patch is additional code that is not needed to implement the desired behavior.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Other browsers accept empty strings and parse them as if they are omitted.

Does the standard mandate this behavior or is it just an unwritten rule?

&gt; Source/WebCore/css/FontFace.cpp:55
&gt; +    if (family.isEmpty())
&gt; +        return nullptr;

This is not needed. The setFamily function will set the exception code to SYNTAX_ERR and the code below will notice that and return nullptr. I don’t think we need to optimize the performance of this failure case, so I suggest omitting this check.

&gt; Source/WebCore/css/FontFace.cpp:76
&gt; +    result-&gt;setStyle(descriptors.style.isEmpty() ? ASCIILiteral(&quot;normal&quot;) : descriptors.style, ec);

Super-irritating that all these default values are replicated here and in FontFace.idl. I suppose we could instead make all the IDL file defaults be empty string instead; it wouldn’t affect behavior and the code generated would be slightly more efficient. But then I suppose the IDL file wouldn’t match the one from the specification.

&gt; Source/WebCore/css/FontFace.cpp:145
&gt; +    if (family.isEmpty()) {
&gt; +        ec = SYNTAX_ERR;
&gt; +        return;
&gt; +    }

I am pretty sure this is not needed. Although I haven’t tested it, I’m almost certain that if you call parseString with an empty string it will return a nullptr. I don’t think we need to optimize the performance of this failure case, so I suggest omitting this check.

&gt; Source/WebCore/css/FontFace.cpp:159
&gt; +    if (style.isEmpty()) {
&gt; +        ec = SYNTAX_ERR;
&gt; +        return;
&gt; +    }

Ditto.

&gt; Source/WebCore/css/FontFace.cpp:173
&gt; +    if (weight.isEmpty()) {
&gt; +        ec = SYNTAX_ERR;
&gt; +        return;
&gt; +    }

Ditto.

&gt; Source/WebCore/css/FontFace.cpp:192
&gt; +    if (unicodeRange.isEmpty()) {
&gt; +        ec = SYNTAX_ERR;
&gt; +        return;
&gt; +    }

Ditto.

&gt; Source/WebCore/css/FontFace.cpp:206
&gt; +    if (variant.isEmpty()) {
&gt; +        ec = SYNTAX_ERR;
&gt; +        return;
&gt; +    }

Ditto.

&gt; Source/WebCore/css/FontFace.cpp:263
&gt; +    if (featureSettings.isEmpty()) {
&gt; +        ec = SYNTAX_ERR;
&gt; +        return;
&gt; +    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196758</commentid>
    <comment_count>3</comment_count>
      <attachid>279871</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-26 10:06:23 -0700</bug_when>
    <thetext>Comment on attachment 279871
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=279871&amp;action=review

&gt;&gt; Source/WebCore/css/FontFace.cpp:55
&gt;&gt; +        return nullptr;
&gt; 
&gt; This is not needed. The setFamily function will set the exception code to SYNTAX_ERR and the code below will notice that and return nullptr. I don’t think we need to optimize the performance of this failure case, so I suggest omitting this check.

Good catch.

&gt;&gt; Source/WebCore/css/FontFace.cpp:76
&gt;&gt; +    result-&gt;setStyle(descriptors.style.isEmpty() ? ASCIILiteral(&quot;normal&quot;) : descriptors.style, ec);
&gt; 
&gt; Super-irritating that all these default values are replicated here and in FontFace.idl. I suppose we could instead make all the IDL file defaults be empty string instead; it wouldn’t affect behavior and the code generated would be slightly more efficient. But then I suppose the IDL file wouldn’t match the one from the specification.

It&apos;s difficult to decide either way. I definitely don&apos;t like duplication, but I also believe that IDL files describe our intent of what we implement. Developers will look at our IDL file to figure stuff like this out.

Maybe a comment...

&gt;&gt; Source/WebCore/css/FontFace.cpp:145
&gt;&gt; +    }
&gt; 
&gt; I am pretty sure this is not needed. Although I haven’t tested it, I’m almost certain that if you call parseString with an empty string it will return a nullptr. I don’t think we need to optimize the performance of this failure case, so I suggest omitting this check.

parseString unconditionally calls CSSParser::parseValue(), whose first line is ASSERT(!string.isEmpty());

I think it&apos;s valuable for the constructor to simply call set{Family,Style,Weight,...}(), which means that the null check should be done inside the constructor, not inside (a function called by) those setter functions. (Otherwise, if the check was in parseString(), the set*() functions would set ec and the constructor wouldn&apos;t know about it.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196761</commentid>
    <comment_count>4</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-26 10:07:10 -0700</bug_when>
    <thetext>Committed r201421: &lt;http://trac.webkit.org/changeset/201421&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196763</commentid>
    <comment_count>5</comment_count>
      <attachid>279871</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-26 10:11:07 -0700</bug_when>
    <thetext>Comment on attachment 279871
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=279871&amp;action=review

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        Other browsers accept empty strings and parse them as if they are omitted.
&gt; 
&gt; Does the standard mandate this behavior or is it just an unwritten rule?

The spec says &quot;Parse the family argument, and the members of the descriptors argument, according to the grammars of the corresponding descriptors of the CSS @font-face rule.&quot; which seems to me it would dictate that empty strings cause errors. I don&apos;t see anything about replacing empty strings with their default value.

So this appears to be an unwritten rule. I found out about it from a web developer saying that their site works in other browsers but not WebKit.

Do you think this is worth updating the spec?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197083</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-27 09:11:49 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Do you think this is worth updating the spec?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197105</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-27 10:25:29 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Do you think this is worth updating the spec?
&gt; 
&gt; Yes.

https://github.com/w3c/csswg-drafts/issues/151</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279871</attachid>
            <date>2016-05-26 00:09:44 -0700</date>
            <delta_ts>2016-05-26 09:18:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158112-20160526001053.patch</filename>
            <type>text/plain</type>
            <size>9832</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTExN2E4YTQzN2NjYjE1
NzNiN2I2YTQwOGRjOGU3ZWFhZmM4Y2RhNC4uYTY3M2JlNjdjMzYwYmU2NGJmNzY1ZDkwYzRjMWZm
NDA0YTJiNDY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA1LTI2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0ZvbnQgTG9h
ZGluZ10gQWxsb3cgZW1wdHkgc3RyaW5ncyBpbiBGb250RmFjZSBjb25zdHJ1Y3RvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MTEyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3RoZXIgYnJvd3NlcnMg
YWNjZXB0IGVtcHR5IHN0cmluZ3MgYW5kIHBhcnNlIHRoZW0gYXMgaWYgdGhleSBhcmUgb21pdHRl
ZC4KKyAgICAgICAgV2Ugc2hvdWxkIGRvIHRoZSBzYW1lLiBIb3dldmVyLCB0aGlzIGlzIG9ubHkg
dHJ1ZSBmb3IgdGhlIGNvbnN0cnVjdG9yLiBTZXR0aW5nCisgICAgICAgIGFuIGF0dHJpYnV0ZSB0
byBhbiBlbXB0eSBzdHJpbmcgc2hvdWxkIHN0aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KKworICAg
ICAgICBUZXN0OiBmYXN0L3RleHQvZm9udC1mYWNlLWVtcHR5LXN0cmluZy5odG1sCisKKyAgICAg
ICAgKiBjc3MvRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c2V0RmFtaWx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRGYWNlOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6
c2V0V2VpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpzZXRVbmljb2RlUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNldFZhcmlhbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udEZhY2U6OnNldEZlYXR1cmVTZXR0aW5ncyk6CisKIDIwMTYtMDUtMjUgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgSGFzaE1hcDo6YWRkKCkg
aW5zdGVhZCBvZiBIYXNoTWFwOjpzZXQoKSBpbiBOb2RlOjplbnN1cmVFdmVudFRhcmdldERhdGEo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKaW5kZXggZTg1ZmEwMzEwMzliZDU2N2E4Y2M3MzgxMDIx
NGNmZWZiMzNiZjk1Yi4uMjgwMDIyZjdmYWE4M2E5ODg0OTIyY2YwMjI0NTE3NTNlOWUzM2YyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCkBAIC01MSw2ICs1MSw5IEBAIFJlZlB0cjxGb250RmFj
ZT4gRm9udEZhY2U6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIERvY3VtZW50JiBkb2N1
bWVudCwgY29uCiAKICAgICBib29sIGRhdGFSZXF1aXJlc0FzeW5jaHJvbm91c0xvYWRpbmcgPSB0
cnVlOwogCisgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCiAgICAgZWMgPSAwOwogICAgIHJlc3VsdC0+c2V0RmFtaWx5KGZhbWlseSwgZWMpOwogICAg
IGlmIChlYykKQEAgLTcwLDIyICs3MywyMiBAQCBSZWZQdHI8Rm9udEZhY2U+IEZvbnRGYWNlOjpj
cmVhdGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbgogICAg
ICAgICBkYXRhUmVxdWlyZXNBc3luY2hyb25vdXNMb2FkaW5nID0gcG9wdWxhdGVGb250RmFjZVdp
dGhBcnJheUJ1ZmZlcihyZXN1bHQtPmJhY2tpbmcoKSwgYXJyYXlCdWZmZXJWaWV3LnJlbGVhc2VO
b25OdWxsKCkpOwogICAgIH0KIAotICAgIHJlc3VsdC0+c2V0U3R5bGUoZGVzY3JpcHRvcnMuc3R5
bGUsIGVjKTsKKyAgICByZXN1bHQtPnNldFN0eWxlKGRlc2NyaXB0b3JzLnN0eWxlLmlzRW1wdHko
KSA/IEFTQ0lJTGl0ZXJhbCgibm9ybWFsIikgOiBkZXNjcmlwdG9ycy5zdHlsZSwgZWMpOwogICAg
IGlmIChlYykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmVzdWx0LT5zZXRXZWlnaHQo
ZGVzY3JpcHRvcnMud2VpZ2h0LCBlYyk7CisgICAgcmVzdWx0LT5zZXRXZWlnaHQoZGVzY3JpcHRv
cnMud2VpZ2h0LmlzRW1wdHkoKSA/IEFTQ0lJTGl0ZXJhbCgibm9ybWFsIikgOiBkZXNjcmlwdG9y
cy53ZWlnaHQsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJlc3VsdC0+c2V0U3RyZXRjaChkZXNjcmlwdG9ycy5zdHJldGNoLCBlYyk7CisgICAgcmVzdWx0
LT5zZXRTdHJldGNoKGRlc2NyaXB0b3JzLnN0cmV0Y2guaXNFbXB0eSgpID8gQVNDSUlMaXRlcmFs
KCJub3JtYWwiKSA6IGRlc2NyaXB0b3JzLnN0cmV0Y2gsIGVjKTsKICAgICBpZiAoZWMpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJlc3VsdC0+c2V0VW5pY29kZVJhbmdlKGRlc2NyaXB0
b3JzLnVuaWNvZGVSYW5nZSwgZWMpOworICAgIHJlc3VsdC0+c2V0VW5pY29kZVJhbmdlKGRlc2Ny
aXB0b3JzLnVuaWNvZGVSYW5nZS5pc0VtcHR5KCkgPyBBU0NJSUxpdGVyYWwoIlUrMC0xMEZGRkYi
KSA6IGRlc2NyaXB0b3JzLnVuaWNvZGVSYW5nZSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcmVzdWx0LT5zZXRWYXJpYW50KGRlc2NyaXB0b3JzLnZhcmlh
bnQsIGVjKTsKKyAgICByZXN1bHQtPnNldFZhcmlhbnQoZGVzY3JpcHRvcnMudmFyaWFudC5pc0Vt
cHR5KCkgPyBBU0NJSUxpdGVyYWwoIm5vcm1hbCIpIDogZGVzY3JpcHRvcnMudmFyaWFudCwgZWMp
OwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmVzdWx0LT5zZXRG
ZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRvcnMuZmVhdHVyZVNldHRpbmdzLCBlYyk7CisgICAgcmVz
dWx0LT5zZXRGZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRvcnMuZmVhdHVyZVNldHRpbmdzLmlzRW1w
dHkoKSA/IEFTQ0lJTGl0ZXJhbCgibm9ybWFsIikgOiBkZXNjcmlwdG9ycy5mZWF0dXJlU2V0dGlu
Z3MsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMzYs
NiArMTM5LDExIEBAIFJlZlB0cjxDU1NWYWx1ZT4gRm9udEZhY2U6OnBhcnNlU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBDU1NQcm9wZXJ0eUlEIHByb3BlCiAKIHZvaWQgRm9udEZhY2U6OnNl
dEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAg
aWYgKGZhbWlseS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgaWYgKGF1
dG8gdmFsdWUgPSBwYXJzZVN0cmluZyhmYW1pbHksIENTU1Byb3BlcnR5Rm9udEZhbWlseSkpCiAg
ICAgICAgIHN1Y2Nlc3MgPSBtX2JhY2tpbmctPnNldEZhbWlsaWVzKCp2YWx1ZSk7CkBAIC0xNDUs
NiArMTUzLDExIEBAIHZvaWQgRm9udEZhY2U6OnNldEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWls
eSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKIHZvaWQgRm9udEZhY2U6OnNldFN0eWxlKGNvbnN0IFN0
cmluZyYgc3R5bGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIGlmIChzdHlsZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZVN0
cmluZyhzdHlsZSwgQ1NTUHJvcGVydHlGb250U3R5bGUpKQogICAgICAgICBzdWNjZXNzID0gbV9i
YWNraW5nLT5zZXRTdHlsZSgqdmFsdWUpOwpAQCAtMTU0LDYgKzE2NywxMSBAQCB2b2lkIEZvbnRG
YWNlOjpzZXRTdHlsZShjb25zdCBTdHJpbmcmIHN0eWxlLCBFeGNlcHRpb25Db2RlJiBlYykKIAog
dm9pZCBGb250RmFjZTo6c2V0V2VpZ2h0KGNvbnN0IFN0cmluZyYgd2VpZ2h0LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKKyAgICBpZiAod2VpZ2h0LmlzRW1wdHkoKSkgeworICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIHN1Y2Nlc3MgPSBm
YWxzZTsKICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3RyaW5nKHdlaWdodCwgQ1NTUHJvcGVy
dHlGb250V2VpZ2h0KSkKICAgICAgICAgc3VjY2VzcyA9IG1fYmFja2luZy0+c2V0V2VpZ2h0KCp2
YWx1ZSk7CkBAIC0xNjgsNiArMTg2LDExIEBAIHZvaWQgRm9udEZhY2U6OnNldFN0cmV0Y2goY29u
c3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpCiAKIHZvaWQgRm9udEZhY2U6OnNldFVuaWNvZGVS
YW5nZShjb25zdCBTdHJpbmcmIHVuaWNvZGVSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Cisg
ICAgaWYgKHVuaWNvZGVSYW5nZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJS
OworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAg
ICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZVN0cmluZyh1bmljb2RlUmFuZ2UsIENTU1Byb3BlcnR5
VW5pY29kZVJhbmdlKSkKICAgICAgICAgc3VjY2VzcyA9IG1fYmFja2luZy0+c2V0VW5pY29kZVJh
bmdlKCp2YWx1ZSk7CkBAIC0xNzcsNiArMjAwLDExIEBAIHZvaWQgRm9udEZhY2U6OnNldFVuaWNv
ZGVSYW5nZShjb25zdCBTdHJpbmcmIHVuaWNvZGVSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAK
IHZvaWQgRm9udEZhY2U6OnNldFZhcmlhbnQoY29uc3QgU3RyaW5nJiB2YXJpYW50LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKKyAgICBpZiAodmFyaWFudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMg
PSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYXV0byBzdHlsZSA9
IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIGF1dG8gcmVzdWx0ID0gQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCB2YXJpYW50
LCB0cnVlLCBDU1NTdHJpY3RNb2RlLCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0ID09IENTU1Bh
cnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yKSB7CkBAIC0yMjksNiArMjU3LDExIEBAIHZvaWQgRm9u
dEZhY2U6OnNldFZhcmlhbnQoY29uc3QgU3RyaW5nJiB2YXJpYW50LCBFeGNlcHRpb25Db2RlJiBl
YykKIAogdm9pZCBGb250RmFjZTo6c2V0RmVhdHVyZVNldHRpbmdzKGNvbnN0IFN0cmluZyYgZmVh
dHVyZVNldHRpbmdzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAoZmVhdHVyZVNldHRp
bmdzLmlzRW1wdHkoKSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBhdXRvIHZhbHVlID0gcGFyc2VTdHJpbmcoZmVhdHVyZVNldHRpbmdz
LCBDU1NQcm9wZXJ0eUZvbnRGZWF0dXJlU2V0dGluZ3MpOwogICAgIGlmICghdmFsdWUpIHsKICAg
ICAgICAgZWMgPSBTWU5UQVhfRVJSOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE2OTc4OTE4NzEyNjFiNmY0YjA5MDdmZjIw
ZjIwZDFjNzcyYzBkOWYuLmZlOWE2ZTYwM2EzMDZiZDk1Y2VjY2YxZjkzNmI2NmZkM2JjY2MyYmYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNi0wNS0yNiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtGb250IExvYWRpbmddIEFsbG93IGVtcHR5
IHN0cmluZ3MgaW4gRm9udEZhY2UgY29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODExMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC90ZXh0L2ZvbnQtZmFjZS1lbXB0eS1zdHJp
bmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvZm9udC1mYWNlLWVt
cHR5LXN0cmluZy5odG1sOiBBZGRlZC4KKwogMjAxNi0wNS0yNSAgQmVuamFtaW4gUG91bGFpbiAg
PGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0pTQ10gUmVnRXhwIHdpdGggZGVlcGx5
IG5lc3RlZCBzdWJleHByZXNzaW9ucyBvdmVyZmxvdyB0aGUgc3RhY2sgaW4gWWFycgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2ZvbnQtZmFjZS1lbXB0eS1zdHJpbmctZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2ZvbnQtZmFjZS1lbXB0eS1zdHJpbmctZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0NWRmMDYzYjlhODg1OTg2YjgyZDhmMGNkOTIyYmNiMTBi
NzVlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvZm9udC1mYWNl
LWVtcHR5LXN0cmluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNSBAQAorVGhpcyB0ZXN0IG1h
a2VzIHN1cmUgdGhhdCBjb25zdHJ1Y3RpbmcgYSBGb250RmFjZSB3aXRoIGVtcHR5IHN0cmluZ3Mg
aXMgdGhlIHNhbWUgYXMgb21pdHRpbmcgdGhvc2Ugc3RyaW5ncy4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1MgZm9udGZhY2UgPSBuZXcgRm9udEZhY2UoJ1dlYkZvbnQnLCAn
dXJsKFwnYXNkZlwnKScsIHtzdHlsZTogJyd9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BB
U1MgZm9udGZhY2Uuc3R5bGUgaXMgIm5vcm1hbCIKK1BBU1MgZm9udGZhY2Uuc3R5bGUgPSAnJyB0
aHJldyBleGNlcHRpb24gRXJyb3I6IFN5bnRheEVycm9yOiBET00gRXhjZXB0aW9uIDEyLgorUEFT
UyBmb250ZmFjZSA9IG5ldyBGb250RmFjZSgnV2ViRm9udCcsICd1cmwoXCdhc2RmXCcpJywge3dl
aWdodDogJyd9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgZm9udGZhY2Uud2VpZ2h0
IGlzICJub3JtYWwiCitQQVNTIGZvbnRmYWNlLndlaWdodCA9ICcnIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogU3ludGF4RXJyb3I6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIGZvbnRmYWNlID0gbmV3
IEZvbnRGYWNlKCdXZWJGb250JywgJ3VybChcJ2FzZGZcJyknLCB7dW5pY29kZVJhbmdlOiAnJ30p
IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBmb250ZmFjZS51bmljb2RlUmFuZ2UgaXMg
IlUrMC0xMGZmZmYiCitQQVNTIGZvbnRmYWNlLnVuaWNvZGVSYW5nZSA9ICcnIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogU3ludGF4RXJyb3I6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIGZvbnRmYWNl
ID0gbmV3IEZvbnRGYWNlKCdXZWJGb250JywgJ3VybChcJ2FzZGZcJyknLCB7dmFyaWFudDogJyd9
KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgZm9udGZhY2UudmFyaWFudCBpcyAibm9y
bWFsIgorUEFTUyBmb250ZmFjZS52YXJpYW50ID0gJycgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBT
eW50YXhFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgZm9udGZhY2UgPSBuZXcgRm9udEZh
Y2UoJ1dlYkZvbnQnLCAndXJsKFwnYXNkZlwnKScsIHtmZWF0dXJlU2V0dGluZ3M6ICcnfSkgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIGZvbnRmYWNlLmZlYXR1cmVTZXR0aW5ncyBpcyAi
bm9ybWFsIgorUEFTUyBmb250ZmFjZS5mZWF0dXJlU2V0dGluZ3MgPSAnJyB0aHJldyBleGNlcHRp
b24gRXJyb3I6IFN5bnRheEVycm9yOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBmb250ZmFjZS5m
YW1pbHkgPSAnJyB0aHJldyBleGNlcHRpb24gRXJyb3I6IFN5bnRheEVycm9yOiBET00gRXhjZXB0
aW9uIDEyLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2UtZW1wdHktc3Ry
aW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvZm9udC1mYWNlLWVtcHR5LXN0cmluZy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBhOTBlMWNhMjNiZjdlZGNjMjBkMzIwMjlmYmQ0MzU1ZDNlMmJmYzIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvZm9udC1mYWNlLWVtcHR5
LXN0cmluZy5odG1sCkBAIC0wLDAgKzEsMzEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBt
YWtlcyBzdXJlIHRoYXQgY29uc3RydWN0aW5nIGEgRm9udEZhY2Ugd2l0aCBlbXB0eSBzdHJpbmdz
IGlzIHRoZSBzYW1lIGFzIG9taXR0aW5nIHRob3NlIHN0cmluZ3MuIik7CisKK3ZhciBmb250ZmFj
ZTsKK3Nob3VsZE5vdFRocm93KCJmb250ZmFjZSA9IG5ldyBGb250RmFjZSgnV2ViRm9udCcsICd1
cmwoXFxcJ2FzZGZcXFwnKScsIHtzdHlsZTogJyd9KSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJmb250ZmFjZS5zdHlsZSIsICJub3JtYWwiKTsKK3Nob3VsZFRocm93KCJmb250ZmFjZS5zdHls
ZSA9ICcnIik7CitzaG91bGROb3RUaHJvdygiZm9udGZhY2UgPSBuZXcgRm9udEZhY2UoJ1dlYkZv
bnQnLCAndXJsKFxcXCdhc2RmXFxcJyknLCB7d2VpZ2h0OiAnJ30pIik7CitzaG91bGRCZUVxdWFs
VG9TdHJpbmcoImZvbnRmYWNlLndlaWdodCIsICJub3JtYWwiKTsKK3Nob3VsZFRocm93KCJmb250
ZmFjZS53ZWlnaHQgPSAnJyIpOworc2hvdWxkTm90VGhyb3coImZvbnRmYWNlID0gbmV3IEZvbnRG
YWNlKCdXZWJGb250JywgJ3VybChcXFwnYXNkZlxcXCcpJywge3VuaWNvZGVSYW5nZTogJyd9KSIp
Oworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJmb250ZmFjZS51bmljb2RlUmFuZ2UiLCAiVSswLTEw
ZmZmZiIpOworc2hvdWxkVGhyb3coImZvbnRmYWNlLnVuaWNvZGVSYW5nZSA9ICcnIik7CitzaG91
bGROb3RUaHJvdygiZm9udGZhY2UgPSBuZXcgRm9udEZhY2UoJ1dlYkZvbnQnLCAndXJsKFxcXCdh
c2RmXFxcJyknLCB7dmFyaWFudDogJyd9KSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJmb250
ZmFjZS52YXJpYW50IiwgIm5vcm1hbCIpOworc2hvdWxkVGhyb3coImZvbnRmYWNlLnZhcmlhbnQg
PSAnJyIpOworc2hvdWxkTm90VGhyb3coImZvbnRmYWNlID0gbmV3IEZvbnRGYWNlKCdXZWJGb250
JywgJ3VybChcXFwnYXNkZlxcXCcpJywge2ZlYXR1cmVTZXR0aW5nczogJyd9KSIpOworc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJmb250ZmFjZS5mZWF0dXJlU2V0dGluZ3MiLCAibm9ybWFsIik7Citz
aG91bGRUaHJvdygiZm9udGZhY2UuZmVhdHVyZVNldHRpbmdzID0gJyciKTsKKworc2hvdWxkVGhy
b3coImZvbnRmYWNlLmZhbWlseSA9ICcnIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="303896"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>