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

Reply via email to