From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-05.nifty.com (conssluserg-05.nifty.com [210.131.2.90]) by sourceware.org (Postfix) with ESMTPS id 179543858C52; Thu, 11 Aug 2022 23:39:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 179543858C52 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=nifty.ne.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nifty.ne.jp Received: from HP-Z230 (aj135236.dynamic.ppp.asahi-net.or.jp [220.150.135.236]) (authenticated) by conssluserg-05.nifty.com with ESMTP id 27BNcsv1014550; Fri, 12 Aug 2022 08:38:54 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-05.nifty.com 27BNcsv1014550 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.ne.jp; s=dec2015msa; t=1660261135; bh=GtuWTVG36ILb5ZYredWz36oTL+NbcMOKmtOGpoDeC78=; h=Date:From:To:Subject:In-Reply-To:References:From; b=TtsKQUfyRArIwm9IoDUTiD3udFTj07r5NBWKUltaQBjFzMdcivxpXrHtBEF13MQ2L P8TgZU/NBxBSQrXq4jrV3ObNe3X7DMf//Ybi8qyGCtlR2TtU9QpT5VB83WDKNeRmNE upkTHPNTS+qtDyNqODyGSORPAFV0rcIk+ZBRPTO8EVuNJOzgD5pnorcY73pcEf/mhp Hp14BgwHqFzpsNmFAUoWGx+y0rb7jYVIqnDce/lWDo/PYhHhac1nVx9WFEHHdL7H/5 AJfhL3V20UKx3MnHVpvTUyeN6oWfhPEkRl5gYz+Dl3Wzi9E7KMI1c03lf+KaUm1M3X XJgebXhfLwNEg== X-Nifty-SrcIP: [220.150.135.236] Date: Fri, 12 Aug 2022 08:38:55 +0900 From: Takashi Yano To: cygwin@cygwin.com, newlib@sourceware.org Subject: Re: crash in newlocale() Message-Id: <20220812083855.55b416d464ec153ea3280f4c@nifty.ne.jp> In-Reply-To: References: <20220811211806.bc7f5426ce52f57d1c1538c2@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: cygwin@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Aug 2022 23:39:26 -0000 On Thu, 11 Aug 2022 19:35:39 +0200 Corinna Vinschen wrote: > On Aug 11 21:18, Takashi Yano wrote: > > On Thu, 11 Aug 2022 11:29:28 +1000 > > Tony Cook wrote: > > > Hello everyone, > > > > > > While tracking down a crash in development versions of perl the boostrap > > > miniperl executable was crashing early in the build process: > > > [...] > > > > I looked into this problem and found the access violation > > occurs at: > > newlib/libc/locale/newlocale.c > > @@ 188,7 @@ _newlocale_r (struct _reent *p, int category_mask, const char *locale, > > if (tmp_locale.lc_cat[i].buf == (const void *) -1) > > { > > tmp_locale.lc_cat[i].buf = base->lc_cat[i].buf; > > base->lc_cat[i].ptr = base->lc_cat[i].buf = NULL; <-- Here!!! > > } > > #endif /* __HAVE_LOCALE_INFO__ */ > > _freelocale_r (p, base); > > > > This is because > > locale_t st = newlocale(LC_ALL_MASK, "C", (locale_t)0); > > returns > > extern const struct __locale_t __C_locale; > > return (struct __locale_t *) &__C_locale; > > , which is in the const area that cannot be modified. > > > > This seems to be a newlib bug. > > > > I also found following patch solves the issue. > > > > diff --git a/newlib/libc/locale/newlocale.c b/newlib/libc/locale/newlocale.c > > index 0789d5fd9..1974665ec 100644 > > --- a/newlib/libc/locale/newlocale.c > > +++ b/newlib/libc/locale/newlocale.c > > @@ -108,10 +108,12 @@ _newlocale_r (struct _reent *p, int category_mask, const char *locale, > > } > > /* If the new locale is supposed to be all default locale, just return > > a pointer to the default locale. */ > > +#if 0 > > if ((!base && category_mask == 0) > > || (category_mask == LC_VALID_MASK > > && (!strcmp (locale, "C") || !strcmp (locale, "POSIX")))) > > return __get_C_locale (); > > +#endif > > /* Start with setting all values to the default locale values. */ > > tmp_locale = *__get_C_locale (); > > /* Fill out new category strings. */ > > I think the right thing to do is to avoid freeing this data, if the base > locale is the C locale. I sent a patch to cygwin-patches for review. > Can you please take a look? LGTM. Thanks! -- Takashi Yano