<?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>174506</bug_id>
          
          <creation_ts>2017-07-14 09:26:20 -0700</creation_ts>
          <short_desc>-Wformat-truncation warning in ConfigFile.cpp</short_desc>
          <delta_ts>2017-11-17 14:39:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174463</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>buildbot</cc>
    
    <cc>darin</cc>
    
    <cc>keith_miller</cc>
    
    <cc>loic.yhuel</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1328800</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-14 09:26:20 -0700</bug_when>
    <thetext>This is another new GCC 7 warning.

[978/5861] Building CXX object Source/...criptCore.dir/runtime/ConfigFile.cpp.o
../../Source/JavaScriptCore/runtime/ConfigFile.cpp: In lambda function:
../../Source/JavaScriptCore/runtime/ConfigFile.cpp:281:62: warning: ‘snprintf’ output may be truncated before the last format character [-Wformat-truncation=]
     auto parseLogFile = [&amp;](StatementNesting statementNesting) {
                                                              ^
../../Source/JavaScriptCore/runtime/ConfigFile.cpp:286:29: note: ‘snprintf’ output 2 or more bytes (assuming 4098) into a destination of size 4097
                     snprintf(logPathname, s_maxPathLength + 1, &quot;%s/%s&quot;, m_configDirectory, filename);
                     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                                                                             ^

The warning means that m_configDirectory could potentially consume as much as s_maxPathLength, followed by the trailing NULL, and then the / and the filename might not get printed. That seems like the most reasonable thing to do in this case, so I think that&apos;s fine and the warning should be suppressed. Unfortunately, compilers warn when they see unknown warning suppression pragmas, so the pattern for this is not pretty. I would almost prefer to use WTF::String instead, except all the rest of the code in this function uses cstring functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328812</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-14 09:41:38 -0700</bug_when>
    <thetext>Really strange, it cannot be suppressed by the usual pattern:

#if COMPILER(GCC) &amp;&amp; GCC_VERSION_AT_LEAST(7, 0, 0)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored &quot;-Wformat-truncation&quot;
#endif
                    snprintf(logPathname, s_maxPathLength + 1, &quot;%s/%s&quot;, m_configDirectory, filename);
#if COMPILER(GCC) &amp;&amp; GCC_VERSION_AT_LEAST(7, 0, 0)
#pragma GCC diagnostic pop
#endif

No idea why. GCC does read and understand the pragma (else it would warn), it just doesn&apos;t work. Odd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328823</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-14 10:05:43 -0700</bug_when>
    <thetext>I wound up rewriting the code to avoid the warning. Unfortunately the code is messier now and has the same behavior, but the warning seems useful so I don&apos;t really want to turn it off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328827</commentid>
    <comment_count>3</comment_count>
      <attachid>315438</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-14 10:09:05 -0700</bug_when>
    <thetext>Created attachment 315438
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328866</commentid>
    <comment_count>4</comment_count>
    <who name="Loïc Yhuel">loic.yhuel</who>
    <bug_when>2017-07-14 11:03:43 -0700</bug_when>
    <thetext>Checking the return value of snprintf should avoid the warning.
Perhaps we should return ParseError instead of silently truncating the file name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328945</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-14 12:38:19 -0700</bug_when>
    <thetext>(In reply to Loïc Yhuel from comment #4)
&gt; Checking the return value of snprintf should avoid the warning.
&gt; Perhaps we should return ParseError instead of silently truncating the file
&gt; name.

Much better, thanks for the suggestion!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328947</commentid>
    <comment_count>6</comment_count>
      <attachid>315473</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-14 12:40:03 -0700</bug_when>
    <thetext>Created attachment 315473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329185</commentid>
    <comment_count>7</comment_count>
      <attachid>315473</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-15 08:23:26 -0700</bug_when>
    <thetext>Comment on attachment 315473
Patch

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

&gt; Source/JavaScriptCore/runtime/ConfigFile.cpp:288
&gt; +                    if (written &lt; 0 || static_cast&lt;unsigned&gt;(written) &gt;= s_maxPathLength + 1)

The &quot;written &lt; 0&quot; check here is redundant. If it is true, then the other check is also guaranteed to be true.

Also, &quot;&gt;= s_maxPathLength + 1&quot; is the same thing as &quot;&gt; s_maxPathLength&quot; and the version with &gt;= and +1 seems more oblique.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329190</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-15 09:20:21 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Comment on attachment 315473 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=315473&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/ConfigFile.cpp:288
&gt; &gt; +                    if (written &lt; 0 || static_cast&lt;unsigned&gt;(written) &gt;= s_maxPathLength + 1)
&gt; 
&gt; The &quot;written &lt; 0&quot; check here is redundant. If it is true, then the other
&gt; check is also guaranteed to be true.

What, why would that be?

In practice, yes, a negative return value (probably -1) is almost surely going to be greater than s_maxPathLength + 1 when cast to an unsigned int. But it would be silly to rely on that instead of writing out the check properly. written &lt; 0 checks to see if the function call failed. written &gt;= s_maxPathLength + 1 checks to see if the result was truncated.

I suppose &quot;written&quot; is a terrible name for this variable, because it actually returns the number of bytes that would have been written if the value were not truncated. I&apos;ll choose a better name.

&gt; Also, &quot;&gt;= s_maxPathLength + 1&quot; is the same thing as &quot;&gt; s_maxPathLength&quot; and
&gt; the version with &gt;= and +1 seems more oblique.

I almost changed it to &gt; s_maxPathLength, but I think it&apos;s more clear to read this way because it exactly matches the second argument to snprintf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329196</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-15 09:34:55 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #8)
&gt; In practice, yes, a negative return value (probably -1) is almost surely
&gt; going to be greater than s_maxPathLength + 1 when cast to an unsigned int.

Not &quot;almost surely&quot;, absolutely 100% guaranteed.

&gt; But it would be silly to rely on that instead of writing out the check
&gt; properly.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329199</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-15 09:43:53 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #8)
&gt; &gt; Also, &quot;&gt;= s_maxPathLength + 1&quot; is the same thing as &quot;&gt; s_maxPathLength&quot; and
&gt; &gt; the version with &gt;= and +1 seems more oblique.
&gt; 
&gt; I almost changed it to &gt; s_maxPathLength, but I think it&apos;s more clear to
&gt; read this way because it exactly matches the second argument to snprintf.

Yes the code makes sense if you just read the snprintf manual page and are expecting code implementing &quot;if the return value is greater than or equal to the size argument, the string was too short&quot;. Even then, I think it would be easier to understand if we had a constant named something like bufferSize rather than &quot;s_maxPathLength + 1&quot;.

Otherwise, I think it’s a lot easier to understand the &quot;&gt;&quot; version:

    If the length of the string that would have been printed is larger than the maximum length we can handle, then we have a problem.

Rather than the &quot;&gt;=&quot; version:

    If the length of the string that would have been printed is larger than or equal to the size of the buffer, allocated for the maximum string length plus one for the null terminator, then we have a problem. The reason it&apos;s a problem when it&apos;s only equal and not greater than the size of the buffer is that in that case the string fits in the buffer but the null terminator doesn&apos;t.

I’m not trying to exaggerate anything here, just explain why I think it’s so much harder to know the &quot;&gt;=&quot; version is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329565</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-17 08:26:39 -0700</bug_when>
    <thetext>I still think the &gt;= version is clearer, because even though the thought process involved is much longer, you really *must* think about the null terminator when working with C strings, and the &gt;= version seems clearer to me when considering that null terminator. But I&apos;ll change it to &gt; as you prefer.

(In reply to Darin Adler from comment #9)
&gt; (In reply to Michael Catanzaro from comment #8)
&gt; &gt; In practice, yes, a negative return value (probably -1) is almost surely
&gt; &gt; going to be greater than s_maxPathLength + 1 when cast to an unsigned int.
&gt; 
&gt; Not &quot;almost surely&quot;, absolutely 100% guaranteed.

OK, I see you are right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329567</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-17 08:31:07 -0700</bug_when>
    <thetext>Committed r219561: &lt;http://trac.webkit.org/changeset/219561&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373307</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-17 14:39:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/35624450&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315438</attachid>
            <date>2017-07-14 10:09:05 -0700</date>
            <delta_ts>2017-07-14 12:40:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174506-20170714120904.patch</filename>
            <type>text/plain</type>
            <size>2008</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NDk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
OTFlNDlmNzZlNTUyZmVhMzRiMjJjODJiZWIyYTUwYWU2MTEwYmM1Li5hMTZhYTIwMTc4ZTEyYjEz
NGQwMjg4Yjc1ZTkxYzQ1YzFmOTNiZGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxNy0wNy0xNCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGln
YWxpYS5jb20+CisKKyAgICAgICAgU2lsZW5jZSAtV2Zvcm1hdC10cnVuY2F0aW9uIHdhcm5pbmcg
aW4gQ29uZmlnRmlsZS5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDUwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogcnVudGltZS9Db25maWdGaWxlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29uZmln
RmlsZTo6cGFyc2UpOgorCiAyMDE3LTA3LTEzICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnph
cm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXggY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBidWls
ZGluZyB3aXRoIEdDQyA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25maWdGaWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0Zp
bGUuY3BwCmluZGV4IDA5MTViMWJkZTYzNTI5YzFkMjNlYjM1NTg4OGRlNmZlOGQ3MTljNmEuLjdj
YjQ1ZmViOWVmZDcxYjllMTdiMTQ0NTIwYzk4MzAwZjdkN2IzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCkBAIC0yODIsOSArMjgyLDE1IEBAIHZv
aWQgQ29uZmlnRmlsZTo6cGFyc2UoKQogICAgICAgICBjaGFyKiBmaWxlbmFtZSA9IG51bGxwdHI7
CiAgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoJz0nKSAmJiAoZmlsZW5hbWUgPSBzY2Fu
bmVyLnRyeUNvbnN1bWVTdHJpbmcoKSkpIHsKICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROZXN0
aW5nICE9IE5lc3RlZFN0YXRlbWVudEZhaWxlZENyaXRlcmlhKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGZpbGVuYW1lWzBdICE9ICcvJykKLSAgICAgICAgICAgICAgICAgICAgc25wcmludGYobG9n
UGF0aG5hbWUsIHNfbWF4UGF0aExlbmd0aCArIDEsICIlcy8lcyIsIG1fY29uZmlnRGlyZWN0b3J5
LCBmaWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIChm
aWxlbmFtZVswXSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIGZpbGVu
YW1lIHRvIG1fY29uZmlnRGlyZWN0b3J5LCBzZXBhcmF0ZWQgYnkgYSAvLgorICAgICAgICAgICAg
ICAgICAgICBzdHJuY3B5KGxvZ1BhdGhuYW1lLCBtX2NvbmZpZ0RpcmVjdG9yeSwgc19tYXhQYXRo
TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNwYWNlRm9yRmlsZW5hbWUgPSBz
X21heFBhdGhMZW5ndGggLSBzdHJsZW4obG9nUGF0aG5hbWUpIC0gMTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNwYWNlRm9yRmlsZW5hbWUgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJuY2F0KGxvZ1BhdGhuYW1lLCAiLyIsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RybmNhdChsb2dQYXRobmFtZSwgZmlsZW5hbWUsIHNwYWNlRm9yRmlsZW5hbWUpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIHN0cm5jcHkobG9nUGF0aG5hbWUsIGZpbGVuYW1lLCBzX21heFBhdGhMZW5ndGgpOwogICAg
ICAgICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315473</attachid>
            <date>2017-07-14 12:40:03 -0700</date>
            <delta_ts>2017-07-15 08:23:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174506-20170714144002.patch</filename>
            <type>text/plain</type>
            <size>1971</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZTIwYzM1NTE5YmI2ZDU0OGFiNjg1NTFkMmRkZmFlNmZiZTBjMGJiLi44MzgxMTI5MWEwN2E4YzVh
YTU0ZDQwNDNjYjNiOTk1ZDQyOTQwYTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNy0wNy0xNCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGln
YWxpYS5jb20+CisKKyAgICAgICAgLVdmb3JtYXQtdHJ1bmNhdGlvbiB3YXJuaW5nIGluIENvbmZp
Z0ZpbGUuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzQ1MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGVjayBpZiB0aGUgSlNDIGNvbmZpZyBmaWxlbmFtZSB3b3VsZCBiZSB0cnVuY2F0ZWQgZHVl
IHRvIGV4Y2VlZGluZyBtYXggcGF0aCBsZW5ndGguIElmIHNvLAorICAgICAgICByZXR1cm4gUGFy
c2VFcnJvci4KKworICAgICAgICAqIHJ1bnRpbWUvQ29uZmlnRmlsZS5jcHA6CisgICAgICAgIChK
U0M6OkNvbmZpZ0ZpbGU6OnBhcnNlKToKKwogMjAxNy0wNy0xNCAgWXVzdWtlIFN1enVraSAgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbV1RGXSBVc2Ugc3RkOjp1bmlxdWVfcHRy
IGZvciBTdGFja1RyYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25maWdGaWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0Zp
bGUuY3BwCmluZGV4IDA5MTViMWJkZTYzNTI5YzFkMjNlYjM1NTg4OGRlNmZlOGQ3MTljNmEuLjFh
NmFhNjYzZDhlYWQwNmZjNWQ5N2U0MzdkYzQ5NDkxYmIwNjRmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCkBAIC0yODIsOSArMjgyLDEyIEBAIHZv
aWQgQ29uZmlnRmlsZTo6cGFyc2UoKQogICAgICAgICBjaGFyKiBmaWxlbmFtZSA9IG51bGxwdHI7
CiAgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoJz0nKSAmJiAoZmlsZW5hbWUgPSBzY2Fu
bmVyLnRyeUNvbnN1bWVTdHJpbmcoKSkpIHsKICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROZXN0
aW5nICE9IE5lc3RlZFN0YXRlbWVudEZhaWxlZENyaXRlcmlhKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGZpbGVuYW1lWzBdICE9ICcvJykKLSAgICAgICAgICAgICAgICAgICAgc25wcmludGYobG9n
UGF0aG5hbWUsIHNfbWF4UGF0aExlbmd0aCArIDEsICIlcy8lcyIsIG1fY29uZmlnRGlyZWN0b3J5
LCBmaWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIChm
aWxlbmFtZVswXSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHdyaXR0ZW4gPSBz
bnByaW50Zihsb2dQYXRobmFtZSwgc19tYXhQYXRoTGVuZ3RoICsgMSwgIiVzLyVzIiwgbV9jb25m
aWdEaXJlY3RvcnksIGZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlsZW5hbWUg
dHJ1bmNhdGVkPworICAgICAgICAgICAgICAgICAgICBpZiAod3JpdHRlbiA8IDAgfHwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHdyaXR0ZW4pID49IHNfbWF4UGF0aExlbmd0aCArIDEpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VFcnJvcjsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICAgICAgc3RybmNweShsb2dQYXRobmFtZSwgZmlsZW5hbWUsIHNf
bWF4UGF0aExlbmd0aCk7CiAgICAgICAgICAgICB9CiAK
</data>
<flag name="review"
          id="336312"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>