From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id D0D70385840E; Wed, 19 Apr 2023 08:16:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D0D70385840E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1681892160; bh=20gr7RQXT7litWzKfhlpfVK3ocLye0sO85fQPV15uUQ=; h=From:To:Subject:Date:From; b=G7+ajJ+lBchOGe9jlv0eDptfraSmC8DRu8kP+GgBcJzKgFLVDEdWlIvXBRDZlz79l Sz4u2XA5LlYv++k1UDaWk23Soj8nhJyW6je171rRHkqM/fcqq3ftqQNG4+u3B+TSzV YgeZOmM2WfxikYeC6wMw+2kuh9DwxqHgLlyb5Mo4= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin/main] Cygwin: mbrtowi: fix segfault when pwi is NULL X-Act-Checkin: newlib-cygwin X-Git-Author: David McFarland X-Git-Refname: refs/heads/main X-Git-Oldrev: c743751aafa842eda0ca9cbeffe5b44acc94dd02 X-Git-Newrev: 53f7fb20a064fec180291a497d11eb66fe6172e6 Message-Id: <20230419081600.D0D70385840E@sourceware.org> Date: Wed, 19 Apr 2023 08:16:00 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3D53f7fb20a06= 4fec180291a497d11eb66fe6172e6 commit 53f7fb20a064fec180291a497d11eb66fe6172e6 Author: David McFarland AuthorDate: Tue Apr 18 17:05:34 2023 -0300 Commit: Corinna Vinschen CommitDate: Wed Apr 19 10:14:46 2023 +0200 Cygwin: mbrtowi: fix segfault when pwi is NULL =20 mbrtowi was missing null-checks on pwi, but NULL is passed from regex/engine.c:173. =20 In a git repo with sendemail.smtpserver set, this results in a segfault= when using git-send-email, which calls: =20 git config --get-regexp '^sende?mail[.]' =20 Fixes: 60c25da90d01 ("Cygwin: mbrtowi: define replacement for mbrtowc, = returning UTF-32 value") Signed-off-by: David McFarland Diff: --- winsup/cygwin/strfuncs.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/strfuncs.cc b/winsup/cygwin/strfuncs.cc index 57abf25649ec..76b7216cc3a2 100644 --- a/winsup/cygwin/strfuncs.cc +++ b/winsup/cygwin/strfuncs.cc @@ -159,7 +159,8 @@ mbrtowi (wint_t *pwi, const char *s, size_t n, mbstate_= t *ps) len =3D mbrtowc (&w1, s, n, ps); if (len =3D=3D (size_t) -1 || len =3D=3D (size_t) -2) return len; - *pwi =3D w1; + if (pwi) + *pwi =3D w1; /* Convert surrogate pair to wint_t value */ if (len > 0 && w1 >=3D 0xd800 && w1 <=3D 0xdbff) { @@ -169,7 +170,8 @@ mbrtowi (wint_t *pwi, const char *s, size_t n, mbstate_= t *ps) if (len2 > 0 && w2 >=3D 0xdc00 && w2 <=3D 0xdfff) { len +=3D len2; - *pwi =3D (((w1 & 0x3ff) << 10) | (w2 & 0x3ff)) + 0x10000; + if (pwi) + *pwi =3D (((w1 & 0x3ff) << 10) | (w2 & 0x3ff)) + 0x10000; } else {