On Sun, May 27, 2012 at 3:20 PM, Roland Mainz <[email protected]> wrote:
> On Sun, May 27, 2012 at 5:02 AM, Roland Mainz <[email protected]>
> wrote:
>> On Sun, May 27, 2012 at 4:26 AM, Roland Mainz <[email protected]>
>> wrote:
>>> Below is a valgrind hit found with valgrinds's stack check tool
>>> ("exp-sgcheck" - this tool checks stack+static variables... the
>>> previous reports about valgrind issues were done with the heap checker
>>> called "memcheck").
>>>
>>> After some hours of checking we only found one hit in ast-ksh.2012-05-18:
>>> -- snip --
>>> $ valgrind --tool=exp-sgcheck --trace-children=yes --read-var-info=yes
>>> --num-callers=50 ...
>>> [snip]
>>> ==15591== Invalid read of size 1
>>> ==15591== at 0x548B49: sfvprintf (sfvprintf.c:755)
>>> ==15591== by 0x53C4EB: sfvsprintf (sfprintf.c:75)
>>> ==15591== by 0x53C625: sfsprintf (sfprintf.c:115)
>>> ==15591== by 0x4DF165: _ast_pathtemp (pathtemp.c:322)
>>> ==15591== by 0x5453F2: _tmpfd (sftmp.c:210)
>>> ==15591== by 0x5455BD: _tmpexcept (sftmp.c:311)
>>> ==15591== by 0x535DE5: sfdisc (sfdisc.c:203)
>>> ==15591== by 0x478D17: sh_subtmpfile (subshell.c:124)
>>> ==15591== by 0x482213: sh_exec (xec.c:1575)
>>> ==15591== by 0x47A5B2: sh_subshell (subshell.c:583)
>>> ==15591== by 0x456516: comsubst (macro.c:2132)
>>> ==15591== by 0x452202: varsub (macro.c:1163)
>>> ==15591== by 0x450777: copyto (macro.c:633)
>>> ==15591== by 0x44EF32: sh_macexpand (macro.c:246)
>>> ==15591== by 0x44FB97: sh_macpat (macro.c:424)
>>> ==15591== by 0x486909: sh_exec (xec.c:2824)
>>> ==15591== by 0x485646: sh_exec (xec.c:2493)
>>> ==15591== by 0x418956: exfile (main.c:600)
>>> ==15591== by 0x417B40: sh_main (main.c:373)
>>> ==15591== by 0x416C28: main (pmain.c:45)
>>> ==15591== Address 0x7feffdbe8 expected vs actual:
>>> ==15591== Expected: unknown
>>> ==15591== Actual: stack array "keybuf" of size 16 in frame 3 back from
>>> here
>>> -- snip --
>>
>> Grumpf... I was too fast when I said "... only one hit was found..."
>> ... here is a 2nd one about the global (in this case this means
>> |static|) variable |numbuff|:
>> -- snip --
>> ==2587== exp-sgcheck, a stack and global array overrun detector
>> ==2587== NOTE: This is an Experimental-Class Valgrind Tool
>> ==2587== Copyright (C) 2003-2011, and GNU GPL'd, by OpenWorks Ltd et al.
>> ==2587== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
>> ==2587== Command:
>> /home/test001/work/ast_ksh_20120518/build_normal_64bit_mamfilefix/arch/linux.i386/src/cmd/ksh93/ksh
>> -o nounset -o errexit -c compound\ -a\ c\ ;\ typeset\ -lX\ -a\
>> c[17][19].z=(\ [1]=90\ )\ ;\ \ \ \ \ \ \ \ \ \ \ \ \ function\ x\ {\
>> nameref\ nz=$1\ ;\ \ \ \ \ \ \ \ \ \ \ \ \ \ print\ "\ $((\ round(nz)\
>> ))==$((\ round($nz)\ ))"\ ;\ }\ ;\ x\ c[17][19].z[1]
>> ==2587== Parent PID: 16925
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4EB5F6D: nv_create (name.c:1084)
>> ==2587== by 0x4EB71B1: nv_open (name.c:1414)
>> ==2587== by 0x4EB35D3: nv_setlist (name.c:375)
>> ==2587== by 0x4EDB7F1: sh_exec (xec.c:1184)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237777 expected vs actual:
>> ==2587== Expected: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587== Actual: unknown
>> ==2587== Actual: is 0 after Expected
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4EB5F6D: nv_create (name.c:1084)
>> ==2587== by 0x4EB71B1: nv_open (name.c:1414)
>> ==2587== by 0x4EB35D3: nv_setlist (name.c:375)
>> ==2587== by 0x4EDB7F1: sh_exec (xec.c:1184)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237775 expected vs actual:
>> ==2587== Expected: unknown
>> ==2587== Actual: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4E71ADC: newnode (nvdisc.c:832)
>> ==2587== by 0x4E726F7: nv_search (nvdisc.c:1077)
>> ==2587== by 0x4EB6393: nv_create (name.c:1155)
>> ==2587== by 0x4EB71B1: nv_open (name.c:1414)
>> ==2587== by 0x4EB35D3: nv_setlist (name.c:375)
>> ==2587== by 0x4EDB7F1: sh_exec (xec.c:1184)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237777 expected vs actual:
>> ==2587== Expected: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587== Actual: unknown
>> ==2587== Actual: is 0 after Expected
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4C29488: memcpy (h_intercepts.c:272)
>> ==2587== by 0x4E71B27: newnode (nvdisc.c:836)
>> ==2587== by 0x4E726F7: nv_search (nvdisc.c:1077)
>> ==2587== by 0x4EB6393: nv_create (name.c:1155)
>> ==2587== by 0x4EB71B1: nv_open (name.c:1414)
>> ==2587== by 0x4EB35D3: nv_setlist (name.c:375)
>> ==2587== by 0x4EDB7F1: sh_exec (xec.c:1184)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237777 expected vs actual:
>> ==2587== Expected: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587== Actual: unknown
>> ==2587== Actual: is 0 after Expected
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4EB5F6D: nv_create (name.c:1084)
>> ==2587== by 0x4EB71B1: nv_open (name.c:1414)
>> ==2587== by 0x4EB4418: nv_setlist (name.c:602)
>> ==2587== by 0x4EDB7F1: sh_exec (xec.c:1184)
>> ==2587== by 0x4EB4258: nv_setlist (name.c:568)
>> ==2587== by 0x4EDB7F1: sh_exec (xec.c:1184)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237777 expected vs actual:
>> ==2587== Expected: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587== Actual: unknown
>> ==2587== Actual: is 0 after Expected
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4EB5F6D: nv_create (name.c:1084)
>> ==2587== by 0x4EB71B1: nv_open (name.c:1414)
>> ==2587== by 0x4EB4418: nv_setlist (name.c:602)
>> ==2587== by 0x4EDB7F1: sh_exec (xec.c:1184)
>> ==2587== by 0x4EB4258: nv_setlist (name.c:568)
>> ==2587== by 0x4EDB7F1: sh_exec (xec.c:1184)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237775 expected vs actual:
>> ==2587== Expected: unknown
>> ==2587== Actual: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4EB5F6D: nv_create (name.c:1084)
>> ==2587== by 0x4EB71B1: nv_open (name.c:1414)
>> ==2587== by 0x4E68DAB: setall (typeset.c:640)
>> ==2587== by 0x4E6830D: b_typeset (typeset.c:457)
>> ==2587== by 0x4EDC5B6: sh_exec (xec.c:1367)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237777 expected vs actual:
>> ==2587== Expected: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587== Actual: unknown
>> ==2587== Actual: is 0 after Expected
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4EB5F6D: nv_create (name.c:1084)
>> ==2587== by 0x4EB71B1: nv_open (name.c:1414)
>> ==2587== by 0x4E68DAB: setall (typeset.c:640)
>> ==2587== by 0x4E6830D: b_typeset (typeset.c:457)
>> ==2587== by 0x4EDC5B6: sh_exec (xec.c:1367)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237775 expected vs actual:
>> ==2587== Expected: unknown
>> ==2587== Actual: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4EB5F6D: nv_create (name.c:1084)
>> ==2587== by 0x4EB71B1: nv_open (name.c:1414)
>> ==2587== by 0x4EBC91E: nv_setref (name.c:3369)
>> ==2587== by 0x4E698DC: setall (typeset.c:828)
>> ==2587== by 0x4E6830D: b_typeset (typeset.c:457)
>> ==2587== by 0x4EDC5B6: sh_exec (xec.c:1367)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4EE3B41: sh_funscope (xec.c:3409)
>> ==2587== by 0x4EE41C9: sh_funct (xec.c:3493)
>> ==2587== by 0x4EDD04C: sh_exec (xec.c:1533)
>> ==2587== by 0x4EDF390: sh_exec (xec.c:2181)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237777 expected vs actual:
>> ==2587== Expected: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587== Actual: unknown
>> ==2587== Actual: is 0 after Expected
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4EB5F6D: nv_create (name.c:1084)
>> ==2587== by 0x4EB71B1: nv_open (name.c:1414)
>> ==2587== by 0x4EBC91E: nv_setref (name.c:3369)
>> ==2587== by 0x4E698DC: setall (typeset.c:828)
>> ==2587== by 0x4E6830D: b_typeset (typeset.c:457)
>> ==2587== by 0x4EDC5B6: sh_exec (xec.c:1367)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4EE3B41: sh_funscope (xec.c:3409)
>> ==2587== by 0x4EE41C9: sh_funct (xec.c:3493)
>> ==2587== by 0x4EDD04C: sh_exec (xec.c:1533)
>> ==2587== by 0x4EDF390: sh_exec (xec.c:2181)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237775 expected vs actual:
>> ==2587== Expected: unknown
>> ==2587== Actual: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4F56A1F: _ast_strdup (strdup.c:59)
>> ==2587== by 0x4EBCE13: nv_setref (name.c:3453)
>> ==2587== by 0x4E698DC: setall (typeset.c:828)
>> ==2587== by 0x4E6830D: b_typeset (typeset.c:457)
>> ==2587== by 0x4EDC5B6: sh_exec (xec.c:1367)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4EE3B41: sh_funscope (xec.c:3409)
>> ==2587== by 0x4EE41C9: sh_funct (xec.c:3493)
>> ==2587== by 0x4EDD04C: sh_exec (xec.c:1533)
>> ==2587== by 0x4EDF390: sh_exec (xec.c:2181)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237777 expected vs actual:
>> ==2587== Expected: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587== Actual: unknown
>> ==2587== Actual: is 0 after Expected
>> ==2587==
>> ==2587== Invalid read of size 1
>> ==2587== at 0x4C29488: memcpy (h_intercepts.c:272)
>> ==2587== by 0x4F56A5C: _ast_strdup (strdup.c:59)
>> ==2587== by 0x4EBCE13: nv_setref (name.c:3453)
>> ==2587== by 0x4E698DC: setall (typeset.c:828)
>> ==2587== by 0x4E6830D: b_typeset (typeset.c:457)
>> ==2587== by 0x4EDC5B6: sh_exec (xec.c:1367)
>> ==2587== by 0x4EDF35C: sh_exec (xec.c:2177)
>> ==2587== by 0x4EE3B41: sh_funscope (xec.c:3409)
>> ==2587== by 0x4EE41C9: sh_funct (xec.c:3493)
>> ==2587== by 0x4EDD04C: sh_exec (xec.c:1533)
>> ==2587== by 0x4EDF390: sh_exec (xec.c:2181)
>> ==2587== by 0x4E6EE0E: exfile (main.c:600)
>> ==2587== by 0x4E6DFF8: sh_main (main.c:373)
>> ==2587== by 0x400698: main (pmain.c:45)
>> ==2587== Address 0x5237777 expected vs actual:
>> ==2587== Expected: global array "numbuff" of size 7 in object with
>> soname "NONE"
>> ==2587== Actual: unknown
>> ==2587== Actual: is 0 after Expected
>> ==2587==
>> ==2587==
>> ==2587== ERROR SUMMARY: 16 errors from 12 contexts (suppressed: 531 from 275)
>> -- snip --
>
> ... and here is the next one:
> -- snip --
> ==22003== exp-sgcheck, a stack and global array overrun detector
> ==22003== NOTE: This is an Experimental-Class Valgrind Tool
> ==22003== Copyright (C) 2003-2011, and GNU GPL'd, by OpenWorks Ltd et al.
> ==22003== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
> ==22003== Command:
> /home/test001/work/ast_ksh_20120518/build_normal_64bit_mamfilefix/arch/linux.i386/src/cmd/ksh93/ksh
> -c A_t\ a;\ print\ ${a.b.n}
> ==22003== Parent PID: 21988
> ==22003==
> ==22003== Invalid read of size 1
> ==22003== at 0x4EA22F6: sh_lex (lex.c:387)
> ==22003== by 0x4EC6035: simple (parse.c:1493)
> ==22003== by 0x4EC4C51: assign (parse.c:1062)
> ==22003== by 0x4EC61B6: simple (parse.c:1529)
> ==22003== by 0x4EC59B9: item (parse.c:1351)
> ==22003== by 0x4EC2DFF: term (parse.c:577)
> ==22003== by 0x4EC2CE3: list (parse.c:547)
> ==22003== by 0x4EC2B79: sh_cmd (parse.c:497)
> ==22003== by 0x4EC2754: sh_parse (parse.c:386)
> ==22003== by 0x4ED931F: sh_eval (xec.c:576)
> ==22003== by 0x4EC9A46: funload (path.c:631)
> ==22003== by 0x4ECA05F: path_search (path.c:722)
> ==22003== by 0x4EC4B71: assign (parse.c:1044)
> ==22003== by 0x4EC61B6: simple (parse.c:1529)
> ==22003== by 0x4EC59B9: item (parse.c:1351)
> ==22003== by 0x4EC2DFF: term (parse.c:577)
> ==22003== by 0x4EC2CE3: list (parse.c:547)
> ==22003== by 0x4EC2B79: sh_cmd (parse.c:497)
> ==22003== by 0x4EC2754: sh_parse (parse.c:386)
> ==22003== by 0x4ED931F: sh_eval (xec.c:576)
> ==22003== by 0x4EC9A46: funload (path.c:631)
> ==22003== by 0x4ECA05F: path_search (path.c:722)
> ==22003== by 0x4EDBB60: sh_exec (xec.c:1242)
> ==22003== by 0x4EDF35C: sh_exec (xec.c:2177)
> ==22003== by 0x4E6EE0E: exfile (main.c:600)
> ==22003== by 0x4E6DFF8: sh_main (main.c:373)
> ==22003== by 0x400698: main (pmain.c:45)
> ==22003== Address 0x7fefde649 expected vs actual:
> ==22003== Expected: unknown
> ==22003== Actual: stack array "buff" of size 65,537 in frame 10
> back from here
> -- snip --
(Hopefully) the last one for today:
-- snip --
==14716== exp-sgcheck, a stack and global array overrun detector
==14716== NOTE: This is an Experimental-Class Valgrind Tool
==14716== Copyright (C) 2003-2011, and GNU GPL'd, by OpenWorks Ltd et al.
==14716== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==14716== Command:
/home/test001/work/ast_ksh_20120518/build_normal_64bit_mamfilefix/arch/linux.i386/src/cmd/ksh93/ksh
-o nounset -c
==14716== typeset\ -T\ ab_t=(
==14716== integer\ a=1
==14716== integer\ b=2
==14716==
==14716== function\ increment
==14716== {
==14716== ((\ _.a++,\ _.b++\ ))
==14716== }
==14716== )
==14716== function\ l_n
==14716== {
==14716== nameref\ sn=$2
==14716==
==14716== sn.increment
==14716==
==14716== $1\ &&\ printf\ "a=%d,\ b=%d
==14716== "\ sn.a\ sn.b
==14716== }
==14716== function\ l
==14716== {
==14716== ab_t\ -S\ s
==14716== l_n\ $1\ s
==14716== }
==14716== (l\ false\ ;\ l\ false\ ;\ l\ true\ ;\
printf\ ";")
==14716== (l\ false\ ;\ l\ false\ ;\ l\ true\ ;\
printf\ ";")
==14716==
==14716== Parent PID: 14699
==14716==
==14716== Invalid read of size 1
==14716== at 0x4F8ABD1: sfvprintf (sfvprintf.c:755)
==14716== by 0x4F7E4D1: sfprintf (sfprintf.c:48)
==14716== by 0x4E75E0A: typeinfo (nvtype.c:704)
==14716== by 0x4F26275: expand (optget.c:902)
==14716== by 0x4F276B1: info (optget.c:1222)
==14716== by 0x4F340E0: _ast_optget (optget.c:4733)
==14716== by 0x4E67CF3: b_typeset (typeset.c:226)
==14716== by 0x4EDC5B6: sh_exec (xec.c:1367)
==14716== by 0x4EDF35C: sh_exec (xec.c:2177)
==14716== by 0x4EE3B41: sh_funscope (xec.c:3409)
==14716== by 0x4EE41C9: sh_funct (xec.c:3493)
==14716== by 0x4EDD04C: sh_exec (xec.c:1533)
==14716== by 0x4EDF35C: sh_exec (xec.c:2177)
==14716== by 0x4ED4C36: sh_subshell (subshell.c:583)
==14716== by 0x4EDEAE0: sh_exec (xec.c:1998)
==14716== by 0x4E6EE0E: exfile (main.c:600)
==14716== by 0x4E6DFF8: sh_main (main.c:373)
==14716== by 0x400698: main (pmain.c:45)
==14716== Address 0x7feffcc10 expected vs actual:
==14716== Expected: unknown
==14716== Actual: stack array "buffer" of size 256 in frame 2 back from here
==14716==
==14716== Invalid read of size 1
==14716== at 0x4F8B2A8: sfvprintf (sfvprintf.c:824)
==14716== by 0x4F7E4D1: sfprintf (sfprintf.c:48)
==14716== by 0x4E75E0A: typeinfo (nvtype.c:704)
==14716== by 0x4F26275: expand (optget.c:902)
==14716== by 0x4F276B1: info (optget.c:1222)
==14716== by 0x4F340E0: _ast_optget (optget.c:4733)
==14716== by 0x4E67CF3: b_typeset (typeset.c:226)
==14716== by 0x4EDC5B6: sh_exec (xec.c:1367)
==14716== by 0x4EDF35C: sh_exec (xec.c:2177)
==14716== by 0x4EE3B41: sh_funscope (xec.c:3409)
==14716== by 0x4EE41C9: sh_funct (xec.c:3493)
==14716== by 0x4EDD04C: sh_exec (xec.c:1533)
==14716== by 0x4EDF35C: sh_exec (xec.c:2177)
==14716== by 0x4ED4C36: sh_subshell (subshell.c:583)
==14716== by 0x4EDEAE0: sh_exec (xec.c:1998)
==14716== by 0x4E6EE0E: exfile (main.c:600)
==14716== by 0x4E6DFF8: sh_main (main.c:373)
==14716== by 0x400698: main (pmain.c:45)
==14716== Address 0x7feffcc10 expected vs actual:
==14716== Expected: unknown
==14716== Actual: stack array "buffer" of size 256 in frame 2 back from here
==14716==
==14716==
==14716== ERROR SUMMARY: 4 errors from 2 contexts (suppressed: 531 from 275)
-- snip --
----
Bye,
Roland
--
__ . . __
(o.\ \/ /.o) [email protected]
\__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer
/O /==\ O\ TEL +49 641 3992797
(;O/ \/ \O;)
_______________________________________________
ast-developers mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-developers