Hi!
----
Compiling and testing ast-ksh.2012-05-04 against the "attributes.sh"
test under valgrind control gives me the following warning that a
conditional jump depends on an uninitialised value in sh/name.c line
1852:
-- snip --
$ CCFLAGS='-g' CC='gcc -std=gnu99 -D_AST_std_malloc=1 -DSHOPT_SYSRC
-D_map_libc=1 -g' ./bin/package make
$ (export LD_LIBRARY_PATH=$PWD/arch/linux.i386/lib
SHELL=$PWD/arch/linux.i386-64/bin/ksh ; LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8 VMALLOC_OPTIONS="abort" valgrind --track-origins=yes
--read-var-info=yes $SHELL src/cmd/ksh93/tests/attributes.sh)
==22034== Conditional jump or move depends on uninitialised value(s)
==22034== at 0x4481CF: nv_putval (name.c:1852)
==22034== by 0x4474FB: nv_open (name.c:1533)
==22034== by 0x444444: nv_setlist (name.c:602)
==22034== by 0x468124: sh_exec (xec.c:1184)
==22034== by 0x46C6CB: sh_exec (xec.c:2420)
==22034== by 0x46B8F6: sh_exec (xec.c:2181)
==22034== by 0x408675: exfile (main.c:599)
==22034== by 0x407ACB: sh_main (main.c:373)
==22034== by 0x406E28: main (pmain.c:45)
==22034== Uninitialised value was created by a heap allocation
==22034== at 0x4C297CD: malloc (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==22034== by 0x504435: _ast_malloc (malloc.c:1037)
==22034== by 0x44833E: nv_putval (name.c:1886)
==22034== by 0x44B158: nv_newattr (name.c:3057)
==22034== by 0x48C622: setall (typeset.c:802)
==22034== by 0x48B1F2: b_typeset (typeset.c:457)
==22034== by 0x468E0F: sh_exec (xec.c:1367)
==22034== by 0x408675: exfile (main.c:599)
==22034== by 0x407ACB: sh_main (main.c:373)
==22034== by 0x406E28: main (pmain.c:45)
-- snip --
... this seems to happen because |*up->cp| in line 1852...
-- snip --
1852 if(!up->cp || *up->cp==0)
1853 flags &= ~NV_APPEND;
-- snip --
... uses memory allocated by |malloc()|.
Proposed fix:
-- snip --
--- ./src/cmd/ksh93/sh/name.c 2012-05-03 20:21:40.000000000 +0200
+++ ./src/cmd/ksh93/sh/name.c 2012-05-08 09:56:38.770519035 +0200
@@ -1884,6 +1884,7 @@
if(size==0)
size = oldsize + (3*dot/4);
cp = (char*)malloc(size+1);
+ cp[0]='\0';
nv_offattr(np,NV_NOFREE);
if(oldsize)
memcpy((void*)cp,(void*)up->cp,oldsize);
-- 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