git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Wataru Noguchi <wnoguchi.0727@gmail.com>
To: "René Scharfe" <l.s.r@web.de>
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	 git@vger.kernel.org, msysgit@googlegroups.com
Subject: Re: [PATCH] mingw-multibyte: fix memory acces violation and path length limits.
Date: Thu, 03 Oct 2013 07:26:23 +0900	[thread overview]
Message-ID: <524C9D8F.2090107@gmail.com> (raw)
In-Reply-To: <524ACFAE.4040701@gmail.com>

Hi,

At last, I foundfollowing Makefile optimization suppression works fine in my case.

CFLAGS = -g -O2 -fno-inline-small-functions -Wall

Following optimization option cause crash,

-finline-small-functions


// entry.c:237

int checkout_entry(struct cache_entry *ce,
		   const struct checkout *state, char *topath)
{
//------------------------------------------------------------------
// crash!
	static char path[PATH_MAX + 1];
//------------------------------------------------------------------
// works fine. but bad practice.
	static char path[4096 + 1];
//------------------------------------------------------------------
	struct stat st;
	int len = state->base_dir_len;

	if (topath)
		return write_entry(ce, topath, state, 1);


Thanks.


(2013/10/01 22:35), Wataru Noguchi wrote:
> Hi,
>
> Thanks for your patch.
>
> Unfortunately, in my case still crash...
>
> But PATH_MAX length kinds issues interesting.
>
> I'll try investigate a little more.
>
> - PATH_MAX and O2
>
> Thanks.
>
> (2013/10/01 2:00), René Scharfe wrote:
>> Am 29.09.2013 04:56, schrieb Wataru Noguchi:
>>> Hi,
>>>
>>> Thanks for comments.
>>>
>>> My currently working repository is
>>>
>>> https://github.com/wnoguchi/git/tree/hotfix/mingw-multibyte-path-checkout-failure
>>>
>>> I have revert commits to 1f10da3.
>>> I'll try failure step.
>>>
>>> - gcc optimization level is O2.(fail)
>>> - gcc O0, O1 works fine.
>>>
>>>
>>> $ gdb git-clone
>>> GNU gdb 6.8
>>> Copyright (C) 2008 Free Software Foundation, Inc.
>>> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
>>> This is free software: you are free to change and redistribute it.
>>> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
>>> and "show warranty" for details.
>>> This GDB was configured as "i686-pc-mingw32"...
>>> (gdb) r https://github.com/wnoguchi/mingw-checkout-crash.git
>>> Starting program: C:\msysgit\git/git-clone.exe https://github.com/wnoguchi/mingw
>>> -checkout-crash.git
>>> [New thread 800.0xa10]
>>> Error: dll starting at 0x779f0000 not found.
>>> Error: dll starting at 0x75900000 not found.
>>> Error: dll starting at 0x779f0000 not found.
>>> Error: dll starting at 0x778f0000 not found.
>>> [New thread 800.0x92c]
>>> Cloning into 'mingw-checkout-crash'...
>>> Error: dll starting at 0x29f0000 not found.
>>> remote: Counting objects: 8, done.
>>> remote: Compressing objects: 100% (7/7), done.
>>> remote: Total 8 (delta 0), reused 8 (delta 0)
>>> Unpacking objects: 100% (8/8), done.
>>> Checking connectivity... done
>>> [New thread 800.0xea0]
>>>
>>> Program received signal SIGSEGV, Segmentation fault.
>>> 0x004d5200 in git_check_attr (
>>>        path=0xacc6a0 ""..., num=5, check=0x572440) at attr.c:754
>>> 754                     const char *value = check_all_attr[check[i].attr->attr_n
>>> r].value;
>>> (gdb) list
>>> 749             int i;
>>> 750
>>> 751             collect_all_attrs(path);
>>> 752
>>> 753             for (i = 0; i < num; i++) {
>>> 754                     const char *value = check_all_attr[check[i].attr->attr_n
>>> r].value;
>>> 755                     if (value == ATTR__UNKNOWN)
>>> 756                             value = ATTR__UNSET;
>>> 757                     check[i].value = value;
>>> 758             }
>>
>> I get a different crash on Linux if I set PATH_MAX to 260.  The following
>> hackish patch prevents it.  Does it help in your case as well?  If it does
>> then I'll send a nicer (but longer) one.
>>
>> Thanks,
>> René
>>
>>
>> diff --git a/unpack-trees.c b/unpack-trees.c
>> index 1a61e6f..9bd7dcb 100644
>> --- a/unpack-trees.c
>> +++ b/unpack-trees.c
>> @@ -961,7 +961,7 @@ static int clear_ce_flags(struct cache_entry **cache, int nr,
>>                   int select_mask, int clear_mask,
>>                   struct exclude_list *el)
>>   {
>> -    char prefix[PATH_MAX];
>> +    char prefix[4096];
>>       return clear_ce_flags_1(cache, nr,
>>                   prefix, 0,
>>                   select_mask, clear_mask,
>>
>>
>


-- 
================================
   Wataru Noguchi
   wnoguchi.0727@gmail.com
   http://wnoguchi.github.io/
================================

-- 
-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en

--- 
You received this message because you are subscribed to the Google Groups "msysGit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

  reply	other threads:[~2013-10-02 22:26 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-28 21:17 [PATCH] mingw-multibyte: fix memory acces violation and path length limits Wataru Noguchi
2013-09-28 23:18 ` Johannes Schindelin
2013-09-29  2:56   ` Wataru Noguchi
2013-09-29 11:01     ` [msysGit] " Stefan Beller
2013-10-01 13:37       ` Wataru Noguchi
2013-09-30 17:00     ` René Scharfe
2013-09-30 21:02       ` Erik Faye-Lund
2013-10-01 13:35       ` Wataru Noguchi
2013-10-02 22:26         ` Wataru Noguchi [this message]
2013-10-03 17:25           ` Antoine Pelisse
2013-10-03 17:36             ` Erik Faye-Lund
2013-10-05 11:39               ` Wataru Noguchi
2013-10-19 10:52               ` [PATCH] Prevent buffer overflows when path is too big Antoine Pelisse
2013-10-20  5:47                 ` Torsten Bögershausen
2013-10-20  6:05                   ` [msysGit] " Ondřej Bílka
2013-10-20  6:27                     ` Torsten Bögershausen
2013-10-20  7:39                       ` [msysGit] " Ondřej Bílka
2013-10-20 10:33                   ` Duy Nguyen
2013-10-20 17:57                     ` Antoine Pelisse
2013-10-21  1:31                       ` Duy Nguyen
2013-10-21 19:02                         ` Johannes Sixt
2013-10-21 19:07                           ` Erik Faye-Lund
2013-10-21 19:14                             ` Jeff King
2013-10-21 19:32                               ` Jeff King
2013-10-23 12:55                                 ` [PATCH 1/2] entry.c: convert checkout_entry to use strbuf Nguyễn Thái Ngọc Duy
2013-10-23 12:55                                   ` [PATCH 2/2] entry.c: convert write_entry " Nguyễn Thái Ngọc Duy
2013-10-23 17:52                                     ` Junio C Hamano
2013-10-24  1:23                                       ` Duy Nguyen
2013-10-24 19:49                                         ` Junio C Hamano
2013-10-24 23:47                                           ` Duy Nguyen
2013-10-23 12:58                                   ` [PATCH 1/2] entry.c: convert checkout_entry " Antoine Pelisse
2013-10-23 13:04                                     ` Duy Nguyen
2013-10-23 13:06                                       ` Antoine Pelisse
2013-10-23 17:29                                   ` Jeff King
2013-10-23 17:34                                     ` Erik Faye-Lund
2013-10-23 17:52                                       ` Jeff King
2013-10-23 18:09                                     ` Junio C Hamano
2013-10-23 18:10                                       ` Jeff King
2013-10-24  1:55                                   ` [PATCH v2] " Nguyễn Thái Ngọc Duy
2013-10-23 12:55                           ` [PATCH] Prevent buffer overflows when path is too big Duy Nguyen
2013-11-26 18:39                             ` [PATCH] Prevent buffer overflows when path is too long Antoine Pelisse
2013-11-26 19:50                               ` Junio C Hamano
2013-11-29 12:12                                 ` Antoine Pelisse
2013-12-14 11:31                                 ` Antoine Pelisse

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=524C9D8F.2090107@gmail.com \
    --to=wnoguchi.0727@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=l.s.r@web.de \
    --cc=msysgit@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).