On Tue, Aug 27, 2013 at 01:22:21PM -0700, Manpreet Singh wrote:
> Hmm, I couldn't reproduce it with just expand this time though now
> but mkdir still crashes in f_mkdir. Stack below:
> 
> % gdb /Applications/MacVim.app/Contents/MacOS/Vim
> (gdb) set args -u NONE -U NONE +'call mkdir(expand("abc", "p", 0700))'
> (gdb) run
> Error detected while processing command line:
> Program received signal EXC_BAD_ACCESS, Could not access memory.
> Reason: KERN_PROTECTION_FAILURE at address: 0x00000001001c0d98
> 0x0000000100036a19 in f_mkdir ()
> (gdb) bt
> #0  0x0000000100036a19 in f_mkdir ()
> #1  0x0000000100025cc3 in call_func ()
> #2  0x0000000100028232 in get_func_tv ()
> #3  0x0000000100027989 in ex_call ()
> #4  0x0000000100058745 in do_one_cmd ()
> #5  0x00000001000550bf in do_cmdline ()
> #6  0x00000001001b69fd in main ()
> (gdb)

I can reproduce on Linux:

Program received signal SIGSEGV, Segmentation fault.
0x000000000046dbf7 in f_mkdir (argvars=0x7fffffffd250, rettv=0x7fffffffd420) at 
eval.c:14297
14297           *gettail_sep(dir) = NUL;
(gdb) bt
#0  0x000000000046dbf7 in f_mkdir (argvars=0x7fffffffd250, 
rettv=0x7fffffffd420) at eval.c:14297
#1  0x0000000000465383 in call_func (funcname=0x92c7a0 "mkdir", len=5, 
rettv=0x7fffffffd420, argcount=1, argvars=0x7fffffffd250, firstline=1, 
    lastline=1, doesrange=0x7fffffffd3f0, evaluate=1, selfdict=0x0) at 
eval.c:8530
#2  0x0000000000464df5 in get_func_tv (name=0x92c7a0 "mkdir", len=5, 
rettv=0x7fffffffd420, arg=0x7fffffffd3f8, firstline=1, lastline=1, 
    doesrange=0x7fffffffd3f0, evaluate=1, selfdict=0x0) at eval.c:8343
#3  0x000000000045d7cc in ex_call (eap=0x7fffffffd530) at eval.c:3460
#4  0x0000000000497caa in do_one_cmd (cmdlinep=0x7fffffffd650, sourcing=1, 
cstack=0x7fffffffd740, fgetline=0x0, cookie=0x0) at ex_docmd.c:2689
#5  0x0000000000495228 in do_cmdline (cmdline=0x7fffffffe2b6 "call 
mkdir(expand(\"abc\", \"p\", 0700))", fgetline=0x0, cookie=0x0, flags=11)
    at ex_docmd.c:1127
#6  0x0000000000494870 in do_cmdline_cmd (cmd=0x7fffffffe2b6 "call 
mkdir(expand(\"abc\", \"p\", 0700))") at ex_docmd.c:732
#7  0x000000000062715d in exe_commands (parmp=0x7fffffffdc90) at main.c:2897
#8  0x00000000006244b8 in main (argc=6, argv=0x7fffffffded8) at main.c:931
(gdb) p dir
$1 = (char_u *) 0x6305d7 ""
(gdb) p gettail(dir)
$2 = (char_u *) 0x6305d7 ""
(gdb) p gettail_sep(dir)
$3 = (char_u *) 0x6305d7 ""

It looks to me that dir is in some read-only section.

(gdb) maintenance info sections
...
    0x0062ed40->0x00666cb9 at 0x0022ed40: .rodata ALLOC LOAD READONLY DATA 
HAS_CONTENTS
...

Yup.

Looks like patch 7.4.006 needs some fixing.

Marius Gedminas
-- 
As far as we know, our computer has never had an undetected error.
                -- Weisert

Attachment: signature.asc
Description: Digital signature

Raspunde prin e-mail lui