standards/188036: mblen(3) in EUC locales causes crash and segmentation fault.

David Chisnall theraven at FreeBSD.org
Wed Apr 2 11:11:52 UTC 2014


I think this is an issue when uselocale() is called with -1 as the argument.  setlocale() for an EUC locale works correctly, as does newlocale()/uselocale().  However, in your test program, you go from an explicit per-thread locale to a generic one and uselocale is not correctly clearing the per-thread cache.

This should be fixed in r264038, thank you for such a detailed report!  The test case was very helpful in diagnosing and fixing the problem.

David

On 31 Mar 2014, at 17:10, Tomohisa Tanaka <tomohisa.tanaka at gmail.com> wrote:

> The following reply was made to PR standards/188036; it has been noted by GNATS.
> 
> From: Tomohisa Tanaka <tomohisa.tanaka at gmail.com>
> To: David Chisnall <theraven at freebsd.org>
> Cc: freebsd-gnats-submit at freebsd.org
> Subject: Re: standards/188036: mblen(3) in EUC locales causes crash and
> segmentation fault.
> Date: Tue, 1 Apr 2014 01:01:46 +0900
> 
> --20cf303f672e1e5ef404f5e92be2
> Content-Type: multipart/alternative; boundary=20cf303f672e1e5ef004f5e92be0
> 
> --20cf303f672e1e5ef004f5e92be0
> Content-Type: text/plain; charset=ISO-8859-1
> 
> Thank you for your quick reply.
> 
> Please can you test this and let me know if it fixes it for you?
> 
> 
> Yes, but it does not work for me as follows:
> 
> % gcc -g3 main.c ~/work/freebsd-usr-src/lib/libc/libc.a
> % gdb ./a.out
> GNU gdb 6.1.1 [FreeBSD]
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" for details.
> This GDB was configured as "amd64-marcel-freebsd"...
> (gdb) run
> Starting program: /usr/home/syl/work/mblen/a.out
> setlocale: ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/C
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x000000000041823b in _EUC_mbrtowc (pwc=0x0, s=0x4321b2 "a", n=1, ps=0x63f318)
>     at /usr/home/syl/work/freebsd-usr-src/lib/libc/locale/euc.c:182
> 182                     want = CEI->count[set = _euc_set(*s)];
> (gdb) bt
> #0  0x000000000041823b in _EUC_mbrtowc (pwc=0x0, s=0x4321b2 "a", n=1,
>     ps=0x63f318)
>     at /usr/home/syl/work/freebsd-usr-src/lib/libc/locale/euc.c:182
> #1  0x0000000000406def in mblen_l (s=0x4321b2 "a", n=1, locale=0x63f260)
>     at /usr/home/syl/work/freebsd-usr-src/lib/libc/locale/mblen.c:51
> #2  0x0000000000406e95 in mblen (s=0x4321b2 "a", n=1)
>     at /usr/home/syl/work/freebsd-usr-src/lib/libc/locale/mblen.c:60
> #3  0x0000000000406bb6 in main () at main.c:16
> (gdb)
> 
> 
> Actually, I'm not sure how this bug can manifest, unless you've somehow
>> built libc with the wrong headers.  In runtype.h (which is included in
>> euc.c), we have this:
>> #define _CurrentRuneLocale (__getCurrentRuneLocale())
>> So these two versions should expand to the same thing.
> 
> 
> (Your fix causes the same thing for me, so you're right.)
> The libc that I used for How-To-Repeat is not built by me (installed by
> installer).
> 
> % setenv LC_MESSAGES C
> % env LANG=ja_JP.eucJP ./a.out
> setlocale: ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/C
> Segmentation fault (core dumped)
> % ldd ./a.out
> ./a.out:
>         libc.so.7 => /lib/libc.so.7 (0x80081a000)
> % env LANG=C ls -l /lib/libc.so.7
> -r--r--r--  1 root  wheel  1406888 Sep 27  2013 /lib/libc.so.7
> % md5 /lib/libc.so.7
> MD5 (/lib/libc.so.7) = d997dd201ec08270e17383223fd2c40a
> 
> (I verified /lib/libc.so.7 is not changed from
> http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/9.2-RELEASE/base.txz)
> I'm sorry, I had not understood this issue enough to make a patch.I
> show another sample as follows:
> 
> % cat main1.c
> #include <stdio.h>
> #include <stdlib.h>
> #include <locale.h>
> #include <xlocale.h>
> #include <runetype.h>
> 
> static void
> showVariables(void)
> {
>   printf("_ThreadRuneLocale: %p\n", _ThreadRuneLocale);
>   if (_ThreadRuneLocale != NULL) {
>     printf("_ThreadRuneLocale->__variable: %p\n",
>            _ThreadRuneLocale->__variable);
>   }
>   printf("__getCurrentRuneLocale(): %p\n", __getCurrentRuneLocale());
>   if (__getCurrentRuneLocale() != NULL) {
>     printf("__getCurrentRuneLocale()->__variable: %p\n",
>            __getCurrentRuneLocale()->__variable);
>   }
>   printf("&_DefaultRuneLocale: %p\n", &_DefaultRuneLocale);
>   printf("&_DefaultRuneLocale->__variable: %p\n",
>          (&_DefaultRuneLocale)->__variable);
> }
> 
> int
> main(void)
> {
>   printf("setlocale: %s\n", setlocale(LC_ALL, ""));
> 
>   printf("[0]\n");
>   showVariables();
> 
>   locale_t newLocale = newlocale(LC_ALL_MASK, "C", NULL);
>   locale_t oldLocale = uselocale(newLocale);
>   /* ... */
> 
>   printf("[1]\n");
>   showVariables();
> 
>   uselocale(oldLocale);
> 
>   printf("[2]\n");
>   showVariables();
> 
>   printf("%d\n", mblen("a", 1));
>   return 0;
> }
> % gcc -g3 main1.c
> % gdb ./a.out
> GNU gdb 6.1.1 [FreeBSD]
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" for details.
> This GDB was configured as "amd64-marcel-freebsd"...
> (gdb) run
> Starting program: /usr/home/syl/work/mblen/a.out
> setlocale: ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/C
> [0]
> _ThreadRuneLocale: 0x0
> __getCurrentRuneLocale(): 0x800d0c000
> __getCurrentRuneLocale()->__variable: 0x800c07040
> &_DefaultRuneLocale: 0x600ee0
> &_DefaultRuneLocale->__variable: 0x0
> [1]
> _ThreadRuneLocale: 0x600ee0
> _ThreadRuneLocale->__variable: 0x0
> __getCurrentRuneLocale(): 0x600ee0
> __getCurrentRuneLocale()->__variable: 0x0
> &_DefaultRuneLocale: 0x600ee0
> &_DefaultRuneLocale->__variable: 0x0
> [2]
> _ThreadRuneLocale: 0x600ee0
> _ThreadRuneLocale->__variable: 0x0
> __getCurrentRuneLocale(): 0x600ee0
> __getCurrentRuneLocale()->__variable: 0x0
> &_DefaultRuneLocale: 0x600ee0
> &_DefaultRuneLocale->__variable: 0x0
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x0000000800908880 in mbsnrtowcs () from /lib/libc.so.7
> (gdb)
> 
> After calling 'uselocale(oldLocale)' [2], _ThreadRuneLocale should not
> be 0x600ee0.It is strange that the states [1] and [2] are the same. (I
> hope this helps.)
> 
> If I can help you in any other way, please let me know.
> 
> 
> 
> 2014-03-31 18:57 GMT+09:00 David Chisnall <theraven at freebsd.org>:
> 
>> On 31 Mar 2014, at 10:03, David Chisnall <theraven at FreeBSD.org> wrote:
>> 
>>> I think the fix should actually be:
>>> 
>>> Index: locale/euc.c
>>> ===================================================================
>>> --- locale/euc.c      (revision 263226)
>>> +++ locale/euc.c      (working copy)
>>> @@ -134,7 +134,7 @@
>>>      return (ps == NULL || ((const _EucState *)ps)->want == 0);
>>> }
>>> 
>>> -#define      CEI     ((_EucInfo *)(_CurrentRuneLocale->__variable))
>>> +#define      CEI     ((_EucInfo
>> *)(__getCurrentRuneLocale()->__variable))
>>> 
>>> #define       _SS2    0x008e
>>> #define       _SS3    0x008f
>>> 
>>> 
>>> 
>>> Please can you test this and let me know if it fixes it for you?
>> 
>> Actually, I'm not sure how this bug can manifest, unless you've somehow
>> built libc with the wrong headers.  In runtype.h (which is included in
>> euc.c), we have this:
>> 
>> #define _CurrentRuneLocale (__getCurrentRuneLocale())
>> 
>> So these two versions should expand to the same thing.
>> 
>> David
>> 
>> 
> 
> 
> -- 
> Tomohisa Tanaka
> Tomohisa.Tanaka at gmail.com
> 
> --20cf303f672e1e5ef004f5e92be0
> Content-Type: text/html; charset=ISO-8859-1
> Content-Transfer-Encoding: quoted-printable
> 
> <div dir=3D"ltr">Thank you for your quick reply.<br><br><blockquote class=
> =3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;bo=
> rder-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">=
> Please can you test this and let me know if it fixes it for you?</blockquot=
> e>
> <br>Yes, but it does not work for me as follows:<br><pre style=3D"color:rgb=
> (0,0,0);word-wrap:break-word;white-space:pre-wrap">% gcc -g3 main.c ~/work/=
> freebsd-usr-src/lib/libc/libc.a=20
> % gdb ./a.out=20
> GNU gdb 6.1.1 [FreeBSD]
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you ar=
> e
> welcome to change it and/or distribute copies of it under certain condition=
> s.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" fo=
> r details.
> This GDB was configured as "amd64-marcel-freebsd"...
> (gdb) run
> Starting program: /usr/home/syl/work/mblen/a.out=20
> setlocale: ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/C
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x000000000041823b in _EUC_mbrtowc (pwc=3D0x0, s=3D0x4321b2 "a", =
> n=3D1, ps=3D0x63f318)
>     at /usr/home/syl/work/freebsd-usr-src/lib/libc/locale/euc.c:182
> 182                     want =3D CEI->count[set =3D _euc_set(*s)];
> (gdb) bt
> #0  0x000000000041823b in _EUC_mbrtowc (pwc=3D0x0, s=3D0x4321b2 "a&quo=
> t;, n=3D1,=20
>     ps=3D0x63f318)
>     at /usr/home/syl/work/freebsd-usr-src/lib/libc/locale/euc.c:182
> #1  0x0000000000406def in mblen_l (s=3D0x4321b2 "a", n=3D1, local=
> e=3D0x63f260)
>     at /usr/home/syl/work/freebsd-usr-src/lib/libc/locale/mblen.c:51
> #2  0x0000000000406e95 in mblen (s=3D0x4321b2 "a", n=3D1)
>     at /usr/home/syl/work/freebsd-usr-src/lib/libc/locale/mblen.c:60
> #3  0x0000000000406bb6 in main () at main.c:16
> (gdb) </pre><br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0=
> px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-le=
> ft-style:solid;padding-left:1ex">Actually, I'm not sure how this bug ca=
> n manifest, unless you've somehow built libc with the wrong headers. =
> =A0In runtype.h (which is included in euc.c), we have this:<br>
> #define _CurrentRuneLocale (__getCurrentRuneLocale())<br>So these two versi=
> ons should expand to the same thing.</blockquote><div><br></div><div>(Your =
> fix causes the same thing for me, so you're right.)</div><div>The libc =
> that I used for How-To-Repeat is not built by me (installed by installer).<=
> /div>
> <pre style=3D"color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap">%=
>  setenv LC_MESSAGES C
> % env LANG=3Dja_JP.eucJP ./a.out
> setlocale: ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/C
> Segmentation fault (core dumped)
> % ldd ./a.out
> ./a.out:
>         libc.so.7 =3D> /lib/libc.so.7 (0x80081a000)
> % env LANG=3DC ls -l /lib/libc.so.7=20
> -r--r--r--  1 root  wheel  1406888 Sep 27  2013 /lib/libc.so.7
> % md5 /lib/libc.so.7
> MD5 (/lib/libc.so.7) =3D d997dd201ec08270e17383223fd2c40a</pre><pre style=
> =3D"word-wrap:break-word"><font face=3D"arial"><span style=3D"white-space:n=
> ormal">(I verified /lib/libc.so.7 is not changed from<br></span></font><spa=
> n style=3D"color:rgb(0,0,0);font-family:arial;white-space:pre-wrap"><a href=
> =3D"http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/9.2-RELEASE/base.txz"=
>> http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/9.2-RELEASE/base.txz</a>=
> )
> </span><span style=3D"color:rgb(0,0,0);font-family:arial;white-space:pre-wr=
> ap">
> I'm sorry, I had not understood this issue enough to make a patch.
> </span><span style=3D"color:rgb(0,0,0);font-family:arial;white-space:pre-wr=
> ap">I show another sample as follows:</span></pre><pre style=3D"word-wrap:b=
> reak-word"><pre style=3D"color:rgb(0,0,0);word-wrap:break-word;white-space:=
> pre-wrap">
> % cat main1.c
> #include <stdio.h>
> #include <stdlib.h>
> #include <locale.h>
> #include <xlocale.h>
> #include <runetype.h>
> 
> static void
> showVariables(void)
> {
>   printf("_ThreadRuneLocale: %p\n", _ThreadRuneLocale);
>   if (_ThreadRuneLocale !=3D NULL) {
>     printf("_ThreadRuneLocale->__variable: %p\n",
>            _ThreadRuneLocale->__variable);
>   }
>   printf("__getCurrentRuneLocale(): %p\n", __getCurrentRuneLocale=
> ());
>   if (__getCurrentRuneLocale() !=3D NULL) {
>     printf("__getCurrentRuneLocale()->__variable: %p\n",
>            __getCurrentRuneLocale()->__variable);
>   }
>   printf("&_DefaultRuneLocale: %p\n", &_DefaultRuneLocale=
> );
>   printf("&_DefaultRuneLocale->__variable: %p\n",
>          (&_DefaultRuneLocale)->__variable);
> }
> 
> int
> main(void)
> {
>   printf("setlocale: %s\n", setlocale(LC_ALL, ""));
> 
>   printf("[0]\n");
>   showVariables();
> 
>   locale_t newLocale =3D newlocale(LC_ALL_MASK, "C", NULL);
>   locale_t oldLocale =3D uselocale(newLocale);
>   /* ... */
> 
>   printf("[1]\n");
>   showVariables();
> 
>   uselocale(oldLocale);
> 
>   printf("[2]\n");
>   showVariables();
> 
>   printf("%d\n", mblen("a", 1));
>   return 0;
> }
> % gcc -g3 main1.c
> % gdb ./a.out
> GNU gdb 6.1.1 [FreeBSD]
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you ar=
> e
> welcome to change it and/or distribute copies of it under certain condition=
> s.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" fo=
> r details.
> This GDB was configured as "amd64-marcel-freebsd"...
> (gdb) run
> Starting program: /usr/home/syl/work/mblen/a.out=20
> setlocale: ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/ja_JP.eucJP/C
> [0]
> _ThreadRuneLocale: 0x0
> __getCurrentRuneLocale(): 0x800d0c000
> __getCurrentRuneLocale()->__variable: 0x800c07040
> &_DefaultRuneLocale: 0x600ee0
> &_DefaultRuneLocale->__variable: 0x0
> [1]
> _ThreadRuneLocale: 0x600ee0
> _ThreadRuneLocale->__variable: 0x0
> __getCurrentRuneLocale(): 0x600ee0
> __getCurrentRuneLocale()->__variable: 0x0
> &_DefaultRuneLocale: 0x600ee0
> &_DefaultRuneLocale->__variable: 0x0
> [2]
> _ThreadRuneLocale: 0x600ee0
> _ThreadRuneLocale->__variable: 0x0
> __getCurrentRuneLocale(): 0x600ee0
> __getCurrentRuneLocale()->__variable: 0x0
> &_DefaultRuneLocale: 0x600ee0
> &_DefaultRuneLocale->__variable: 0x0
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x0000000800908880 in mbsnrtowcs () from /lib/libc.so.7
> (gdb) <span style=3D"font-family:arial"> </span></pre><pre style=3D"word-wr=
> ap:break-word"><pre style=3D"word-wrap:break-word"><span style=3D"white-spa=
> ce:pre-wrap;color:rgb(0,0,0);font-family:arial">After calling 'uselocal=
> e(oldLocale)' [2], _ThreadRuneLocale </span><span style=3D"white-space:=
> pre-wrap;color:rgb(0,0,0);font-family:arial">should not be 0x600ee0.
> </span><span style=3D"color:rgb(0,0,0)"><font face=3D"arial"><span style=3D=
> "white-space:pre-wrap">It is strange that the states [1] and [2] are the sa=
> me. (I hope this helps.)</span></font></span></pre><pre style=3D"word-wrap:=
> break-word">
> <span style=3D"color:rgb(0,0,0);font-family:Arial,'Arial New','=
> \00ff2d\00ff33 \00ff30 \0030b4\0030b7\0030c3\0030af',sans-serif;font-si=
> ze:13px;white-space:normal">If I can help you in any other way, please let =
> me know.</span></pre>
> <pre style=3D"color:rgb(34,34,34);white-space:pre-wrap;word-wrap:break-word=
> "></pre></pre></pre></div><div class=3D"gmail_extra"><br><br><div class=3D"=
> gmail_quote">2014-03-31 18:57 GMT+09:00 David Chisnall <span dir=3D"ltr">&l=
> t;<a href=3D"mailto:theraven at freebsd.org" target=3D"_blank">theraven at freebs=
> d.org</a>></span>:<br>
> <blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
> x #ccc solid;padding-left:1ex"><div class=3D"">On 31 Mar 2014, at 10:03, Da=
> vid Chisnall <theraven at FreeBSD.org> wrote:<br>
> <br>
> > I think the fix should actually be:<br>
> ><br>
> > Index: locale/euc.c<br>
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<br>
> > --- locale/euc.c =A0 =A0 =A0(revision 263226)<br>
> > +++ locale/euc.c =A0 =A0 =A0(working copy)<br>
> > @@ -134,7 +134,7 @@<br>
> > =A0 =A0 =A0 return (ps =3D=3D NULL || ((const _EucState *)ps)->want=
>  =3D=3D 0);<br>
> > }<br>
> ><br>
> > -#define =A0 =A0 =A0CEI =A0 =A0 ((_EucInfo *)(_CurrentRuneLocale->_=
> _variable))<br>
> > +#define =A0 =A0 =A0CEI =A0 =A0 ((_EucInfo *)(__getCurrentRuneLocale()=
> ->__variable))<br>
> ><br>
> > #define =A0 =A0 =A0 _SS2 =A0 =A00x008e<br>
> > #define =A0 =A0 =A0 _SS3 =A0 =A00x008f<br>
> ><br>
> ><br>
> ><br>
> > Please can you test this and let me know if it fixes it for you?<br>
> <br>
> </div>Actually, I'm not sure how this bug can manifest, unless you'=
> ve somehow built libc with the wrong headers. =A0In runtype.h (which is inc=
> luded in euc.c), we have this:<br>
> <br>
> #define _CurrentRuneLocale (__getCurrentRuneLocale())<br>
> <br>
> So these two versions should expand to the same thing.<br>
> <span class=3D"HOEnZb"><font color=3D"#888888"><br>
> David<br>
> <br>
> </font></span></blockquote></div><br><br clear=3D"all"><div><br></div>-- <b=
> r>Tomohisa Tanaka<br><a href=3D"mailto:Tomohisa.Tanaka at gmail.com">Tomohisa.=
> Tanaka at gmail.com</a>
> </div>
> 
> --20cf303f672e1e5ef004f5e92be0--
> --20cf303f672e1e5ef404f5e92be2
> Content-Type: text/plain; charset=US-ASCII; name="report1.txt"
> Content-Disposition: attachment; filename="report1.txt"
> Content-Transfer-Encoding: base64
> X-Attachment-Id: f_htfxye6m0
> 
> JSBnY2MgLWczIG1haW4uYyB+L3dvcmsvZnJlZWJzZC11c3Itc3JjL2xpYi9saWJjL2xpYmMuYQol
> IGdkYiAuL2Eub3V0CkdOVSBnZGIgNi4xLjEgW0ZyZWVCU0RdCkNvcHlyaWdodCAyMDA0IEZyZWUg
> U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpHREIgaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBi
> eSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB5b3UgYXJlCndlbGNvbWUgdG8g
> Y2hhbmdlIGl0IGFuZC9vciBkaXN0cmlidXRlIGNvcGllcyBvZiBpdCB1bmRlciBjZXJ0YWluIGNv
> bmRpdGlvbnMuClR5cGUgInNob3cgY29weWluZyIgdG8gc2VlIHRoZSBjb25kaXRpb25zLgpUaGVy
> ZSBpcyBhYnNvbHV0ZWx5IG5vIHdhcnJhbnR5IGZvciBHREIuICBUeXBlICJzaG93IHdhcnJhbnR5
> IiBmb3IgZGV0YWlscy4KVGhpcyBHREIgd2FzIGNvbmZpZ3VyZWQgYXMgImFtZDY0LW1hcmNlbC1m
> cmVlYnNkIi4uLgooZ2RiKSBydW4KU3RhcnRpbmcgcHJvZ3JhbTogL3Vzci9ob21lL3N5bC93b3Jr
> L21ibGVuL2Eub3V0IApzZXRsb2NhbGU6IGphX0pQLmV1Y0pQL2phX0pQLmV1Y0pQL2phX0pQLmV1
> Y0pQL2phX0pQLmV1Y0pQL2phX0pQLmV1Y0pQL0MKClByb2dyYW0gcmVjZWl2ZWQgc2lnbmFsIFNJ
> R1NFR1YsIFNlZ21lbnRhdGlvbiBmYXVsdC4KMHgwMDAwMDAwMDAwNDE4MjNiIGluIF9FVUNfbWJy
> dG93YyAocHdjPTB4MCwgcz0weDQzMjFiMiAiYSIsIG49MSwgcHM9MHg2M2YzMTgpCiAgICBhdCAv
> dXNyL2hvbWUvc3lsL3dvcmsvZnJlZWJzZC11c3Itc3JjL2xpYi9saWJjL2xvY2FsZS9ldWMuYzox
> ODIKMTgyICAgICAgICAgICAgICAgICAgICAgd2FudCA9IENFSS0+Y291bnRbc2V0ID0gX2V1Y19z
> ZXQoKnMpXTsKKGdkYikgCg==
> --20cf303f672e1e5ef404f5e92be2
> Content-Type: text/plain; charset=US-ASCII; name="report2.txt"
> Content-Disposition: attachment; filename="report2.txt"
> Content-Transfer-Encoding: base64
> X-Attachment-Id: f_htfxyj7g1
> 
> JSBjYXQgbWFpbjEuYwojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5j
> bHVkZSA8bG9jYWxlLmg+CiNpbmNsdWRlIDx4bG9jYWxlLmg+CiNpbmNsdWRlIDxydW5ldHlwZS5o
> PgoKc3RhdGljIHZvaWQKc2hvd1ZhcmlhYmxlcyh2b2lkKQp7CiAgcHJpbnRmKCJfVGhyZWFkUnVu
> ZUxvY2FsZTogJXBcbiIsIF9UaHJlYWRSdW5lTG9jYWxlKTsKICBpZiAoX1RocmVhZFJ1bmVMb2Nh
> bGUgIT0gTlVMTCkgewogICAgcHJpbnRmKCJfVGhyZWFkUnVuZUxvY2FsZS0+X192YXJpYWJsZTog
> JXBcbiIsCiAgICAgICAgICAgX1RocmVhZFJ1bmVMb2NhbGUtPl9fdmFyaWFibGUpOwogIH0KICBw
> cmludGYoIl9fZ2V0Q3VycmVudFJ1bmVMb2NhbGUoKTogJXBcbiIsIF9fZ2V0Q3VycmVudFJ1bmVM
> b2NhbGUoKSk7CiAgaWYgKF9fZ2V0Q3VycmVudFJ1bmVMb2NhbGUoKSAhPSBOVUxMKSB7CiAgICBw
> cmludGYoIl9fZ2V0Q3VycmVudFJ1bmVMb2NhbGUoKS0+X192YXJpYWJsZTogJXBcbiIsCiAgICAg
> ICAgICAgX19nZXRDdXJyZW50UnVuZUxvY2FsZSgpLT5fX3ZhcmlhYmxlKTsKICB9CiAgcHJpbnRm
> KCImX0RlZmF1bHRSdW5lTG9jYWxlOiAlcFxuIiwgJl9EZWZhdWx0UnVuZUxvY2FsZSk7CiAgcHJp
> bnRmKCImX0RlZmF1bHRSdW5lTG9jYWxlLT5fX3ZhcmlhYmxlOiAlcFxuIiwKICAgICAgICAgKCZf
> RGVmYXVsdFJ1bmVMb2NhbGUpLT5fX3ZhcmlhYmxlKTsKfQoKaW50Cm1haW4odm9pZCkKewogIHBy
> aW50Zigic2V0bG9jYWxlOiAlc1xuIiwgc2V0bG9jYWxlKExDX0FMTCwgIiIpKTsKCiAgcHJpbnRm
> KCJbMF1cbiIpOwogIHNob3dWYXJpYWJsZXMoKTsKCiAgbG9jYWxlX3QgbmV3TG9jYWxlID0gbmV3
> bG9jYWxlKExDX0FMTF9NQVNLLCAiQyIsIE5VTEwpOwogIGxvY2FsZV90IG9sZExvY2FsZSA9IHVz
> ZWxvY2FsZShuZXdMb2NhbGUpOwogIC8qIC4uLiAqLwoKICBwcmludGYoIlsxXVxuIik7CiAgc2hv
> d1ZhcmlhYmxlcygpOwoKICB1c2Vsb2NhbGUob2xkTG9jYWxlKTsKCiAgcHJpbnRmKCJbMl1cbiIp
> OwogIHNob3dWYXJpYWJsZXMoKTsKCiAgcHJpbnRmKCIlZFxuIiwgbWJsZW4oImEiLCAxKSk7CiAg
> cmV0dXJuIDA7Cn0KJSBnY2MgLWczIG1haW4xLmMKJSBnZGIgLi9hLm91dApHTlUgZ2RiIDYuMS4x
> IFtGcmVlQlNEXQpDb3B5cmlnaHQgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K
> R0RCIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
> aWNlbnNlLCBhbmQgeW91IGFyZQp3ZWxjb21lIHRvIGNoYW5nZSBpdCBhbmQvb3IgZGlzdHJpYnV0
> ZSBjb3BpZXMgb2YgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgpUeXBlICJzaG93IGNvcHlp
> bmciIHRvIHNlZSB0aGUgY29uZGl0aW9ucy4KVGhlcmUgaXMgYWJzb2x1dGVseSBubyB3YXJyYW50
> eSBmb3IgR0RCLiAgVHlwZSAic2hvdyB3YXJyYW50eSIgZm9yIGRldGFpbHMuClRoaXMgR0RCIHdh
> cyBjb25maWd1cmVkIGFzICJhbWQ2NC1tYXJjZWwtZnJlZWJzZCIuLi4KKGdkYikgcnVuClN0YXJ0
> aW5nIHByb2dyYW06IC91c3IvaG9tZS9zeWwvd29yay9tYmxlbi9hLm91dCAKc2V0bG9jYWxlOiBq
> YV9KUC5ldWNKUC9qYV9KUC5ldWNKUC9qYV9KUC5ldWNKUC9qYV9KUC5ldWNKUC9qYV9KUC5ldWNK
> UC9DClswXQpfVGhyZWFkUnVuZUxvY2FsZTogMHgwCl9fZ2V0Q3VycmVudFJ1bmVMb2NhbGUoKTog
> MHg4MDBkMGMwMDAKX19nZXRDdXJyZW50UnVuZUxvY2FsZSgpLT5fX3ZhcmlhYmxlOiAweDgwMGMw
> NzA0MAomX0RlZmF1bHRSdW5lTG9jYWxlOiAweDYwMGVlMAomX0RlZmF1bHRSdW5lTG9jYWxlLT5f
> X3ZhcmlhYmxlOiAweDAKWzFdCl9UaHJlYWRSdW5lTG9jYWxlOiAweDYwMGVlMApfVGhyZWFkUnVu
> ZUxvY2FsZS0+X192YXJpYWJsZTogMHgwCl9fZ2V0Q3VycmVudFJ1bmVMb2NhbGUoKTogMHg2MDBl
> ZTAKX19nZXRDdXJyZW50UnVuZUxvY2FsZSgpLT5fX3ZhcmlhYmxlOiAweDAKJl9EZWZhdWx0UnVu
> ZUxvY2FsZTogMHg2MDBlZTAKJl9EZWZhdWx0UnVuZUxvY2FsZS0+X192YXJpYWJsZTogMHgwClsy
> XQpfVGhyZWFkUnVuZUxvY2FsZTogMHg2MDBlZTAKX1RocmVhZFJ1bmVMb2NhbGUtPl9fdmFyaWFi
> bGU6IDB4MApfX2dldEN1cnJlbnRSdW5lTG9jYWxlKCk6IDB4NjAwZWUwCl9fZ2V0Q3VycmVudFJ1
> bmVMb2NhbGUoKS0+X192YXJpYWJsZTogMHgwCiZfRGVmYXVsdFJ1bmVMb2NhbGU6IDB4NjAwZWUw
> CiZfRGVmYXVsdFJ1bmVMb2NhbGUtPl9fdmFyaWFibGU6IDB4MAoKUHJvZ3JhbSByZWNlaXZlZCBz
> aWduYWwgU0lHU0VHViwgU2VnbWVudGF0aW9uIGZhdWx0LgoweDAwMDAwMDA4MDA5MDg4ODAgaW4g
> bWJzbnJ0b3djcyAoKSBmcm9tIC9saWIvbGliYy5zby43CihnZGIpIAo=
> --20cf303f672e1e5ef404f5e92be2--
> _______________________________________________
> freebsd-standards at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-standards
> To unsubscribe, send any mail to "freebsd-standards-unsubscribe at freebsd.org"



More information about the freebsd-standards mailing list