On Tue, Dec 16, 2008 at 01:17:08PM +0100, Dr. Werner Fink wrote:
>
> It seems that the abort is caused in src/cmd/ksh93/sh/io.c at line 1142:
>
> Program received signal SIGABRT, Aborted.
> 0x00002aaaab156645 in raise () from /lib64/libc.so.6
> (gdb) bt
> #0 0x00002aaaab156645 in raise () from /lib64/libc.so.6
> #1 0x00002aaaab157c33 in abort () from /lib64/libc.so.6
> #2 0x00002aaaab1928e8 in ?? () from /lib64/libc.so.6
> #3 0x00002aaaab20c4d7 in __fortify_fail () from /lib64/libc.so.6
> #4 0x00002aaaab1eeeb1 in __open64_2 () from /lib64/libc.so.6
> #5 0x000000000041a389 in sh_open (path=0x757661 "/dev/fd/2", flags=577) at
> /usr/include/bits/fcntl2.h:90
> #6 0x000000000041ba8a in sh_redirect (shp=0x746ea0, iop=0x757610, flag=0)
> at /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/io.c:1142
> #7 0x000000000044bb71 in sh_exec (t=0x757590, flags=4) at
> /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/xec.c:939
> #8 0x0000000000448e41 in sh_exec (t=0x757910, flags=5) at
> /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/xec.c:1504
> #9 0x0000000000447df2 in sh_exec (t=0x7579b0, flags=5) at
> /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/xec.c:1383
> #10 0x00000000004430c2 in sh_subshell (t=0x7579b0, flags=5, comsub=1) at
> /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/subshell.c:537
> #11 0x000000000042a993 in comsubst (mp=0x74d050, t=0x7579b0, type=1) at
> /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/macro.c:1951
> #12 0x000000000042673d in varsub (mp=0x74d050) at
> /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/macro.c:1082
> #13 0x000000000042a377 in copyto (mp=0x74d050, endch=0, newquote=<value
> optimized out>) at /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/macro.c:582
> #14 0x000000000042a6f9 in sh_mactrim (shp=<value optimized out>,
> str=0x7573c1 "x=$(\n\t{\n\t\tprint -n 1\n\t\tprint -n 2 >
> /dev/fd/2\n\t\tprint -n 3\n\t\tprint -n 4 > /dev/fd/2\n\t} 2>&1\n)", mode=-1)
> at /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/macro.c:173
> #15 0x0000000000432871 in nv_setlist (arg=0x7573b0, flags=131584) at
> /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/name.c:324
> #16 0x00000000004491af in sh_exec (t=0x757420, flags=4) at
> /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/xec.c:815
> #17 0x000000000040c965 in exfile (shp=0x746ea0, iop=0x767450, fno=10) at
> /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/main.c:606
> #18 0x000000000040d21a in sh_main (ac=<value optimized out>,
> av=0x7fffffffe398, userinit=<value optimized out>)
> at /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/main.c:381
> #19 0x00002aaaab142586 in __libc_start_main () from /lib64/libc.so.6
> #20 0x000000000040bd79 in _start () at ../sysdeps/x86_64/elf/start.S:113
> (gdb) up
> #1 0x00002aaaab157c33 in abort () from /lib64/libc.so.6
> (gdb) up
> #2 0x00002aaaab1928e8 in ?? () from /lib64/libc.so.6
> (gdb) up
> #3 0x00002aaaab20c4d7 in __fortify_fail () from /lib64/libc.so.6
> (gdb) up
> #4 0x00002aaaab1eeeb1 in __open64_2 () from /lib64/libc.so.6
> (gdb) up
> #5 0x000000000041a389 in sh_open (path=0x757661 "/dev/fd/2", flags=577) at
> /usr/include/bits/fcntl2.h:90
> 90 return __open64_2 (__path, __oflag);
> (gdb) up
> #6 0x000000000041ba8a in sh_redirect (shp=0x746ea0, iop=0x757610, flag=0)
> at /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/io.c:1142
> 1142
> if((fd=sh_open(tname?tname:fname,o_mode,RW_ALL)) <0)
> (gdb) list
> 1137 }
> 1138 }
> 1139 openit:
> 1140 if(flag!=SH_SHOWME)
> 1141 {
> 1142
> if((fd=sh_open(tname?tname:fname,o_mode,RW_ALL)) <0)
> 1143
> errormsg(SH_DICT,ERROR_system(1),((o_mode&O_CREAT)?e_create:e_open),fname);
> 1144 if(perm>0)
> 1145 #if _lib_fchmod
> 1146 fchmod(fd,perm);
> (gdb)
>
See attached patch which seems to be resolve the problem.
Werner
--
"Having a smoking section in a restaurant is like having
a peeing section in a swimming pool." -- Edward Burr
--- src/cmd/ksh93/sh/io.c
+++ src/cmd/ksh93/sh/io.c 2008-12-16 12:27:49.000000000 +0000
@@ -718,7 +718,16 @@ int sh_open(register const char *path, i
}
if (fd >= 0)
{
- int nfd = open(path,flags);
+ int nfd;
+ if (flags & O_CREAT)
+ {
+ struct stat st;
+ if (stat(path,&st) < 0)
+ return(-1);
+ nfd = open(path,flags,st.st_mode);
+ }
+ else
+ nfd= open(path,flags);
if(nfd>=0)
{
fd = nfd;
_______________________________________________
ast-developers mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-developers