From patchwork Tue Sep 5 20:25:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 111746 Delivered-To: patch@linaro.org Received: by 10.140.94.166 with SMTP id g35csp3324402qge; Tue, 5 Sep 2017 13:27:42 -0700 (PDT) X-Received: by 10.98.79.157 with SMTP id f29mr5034105pfj.9.1504643262327; Tue, 05 Sep 2017 13:27:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504643262; cv=none; d=google.com; s=arc-20160816; b=QpXWv8h/v8ksMckzoCIbo5S5EbVkR76Pmc4ANdeGLSuezmfphsEMOkZT2FWFcUMxr2 Q1TrCTjhZFEpvEonu45C5hDpqHbpGzvOaVsUrgHIr+KyyKryLz5FJ9FBSWzF8/avLASM PCHx9s0nh7JU5ekqlQmX0cecBKI/77up16AxfFYVgzMiC0SuJa+1WVd7zXf2Ymng9MMO 2w5xQFTF1iOQvKvjIyfdjl7FrnjD7Dv2ptRmJw40lYpnDaXT1LEE8+EJ6DgooLn4mk4Q 3C3xHe7Fb0NMaxDJLIKf4vhkWaiDlZ9JOddzmHYA9vWj3VLS8VvN2mZpjtdJHxkmnJLD nG2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :delivered-to:sender:list-help:list-post:list-archive:list-subscribe :list-unsubscribe:list-id:precedence:mailing-list:dkim-signature :domainkey-signature:arc-authentication-results; bh=7QXjKJO8zzOSdkRYK7Gp21lxzE7yhu//UewS53dVdJY=; b=gm6/ZdV+vegTyEhOclYdQv+A+kR5PwqO7+QOJtoHoojRupOsciglgKq/4X7F1hzO+a adzKu9efysVDmtYg2xrzK+jXy99rZO6vW8yKlxTXmZtcB3SIMMY5T7yeyina+mSGhZH2 mCi4YA1AE92eVzRrdhBq0TEL9gUUNlmLeQqjsLcbWAJLJB7xuvHhK/FUx1HibdkDZMu2 wGmKdOOibUavXbxpSXRbUiwPZ97ODfVFfhlFLFFHFZN9me6B0lPE0boqayO6k98ycYTE 2v3wbDl34JGmOg1EtnK3loORlQ+Z/+WArEzSy8ILWMvnr+c8pLFOcUs+dSmmu4IOpkZn T8rw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=Jphzi2pH; spf=pass (google.com: domain of libc-alpha-return-84216-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=libc-alpha-return-84216-patch=linaro.org@sourceware.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id d22si860917pfj.142.2017.09.05.13.27.42 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Sep 2017 13:27:42 -0700 (PDT) Received-SPF: pass (google.com: domain of libc-alpha-return-84216-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=Jphzi2pH; spf=pass (google.com: domain of libc-alpha-return-84216-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=libc-alpha-return-84216-patch=linaro.org@sourceware.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; q=dns; s=default; b=KoBHamry/STEmmcpwE5Ycx386KA8ImO 9kPLEvc+Wwn+B0jhpR+rA/nUhxd/rEA2ObwctS5gDV6oQhMXxFSJTn342Ic15BJp f2mKRQC69g23YskkgUPWIrhWIzkTj0ubXdOT47lMQ6VNVmJ4z4qV4RF+kTtXKerU 3OIt0Xc+2VD8= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; s=default; bh=r5pvJkGhNDRzvlyhiDJzFiWqMNw=; b=Jphzi 2pHMInLSCO7uQqV4aOXVtGD2kFSPqxF+4oZ3HmdeeV2Ev8tLum7rmqJapxUqXRjJ ryT5DNdXZu/O3EUb2wJizEN/T137daYf3vK5f0+swFaels7uEpm7Nr7MRFvL5ah+ 9QO0RhJEp9sw1V4wq69V39SJylTo4gtm8ebNDM= Received: (qmail 51261 invoked by alias); 5 Sep 2017 20:25:59 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 50633 invoked by uid 89); 5 Sep 2017 20:25:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-27.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=responsable, 2728, Hx-languages-length:3671 X-HELO: mail-qt0-f179.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7QXjKJO8zzOSdkRYK7Gp21lxzE7yhu//UewS53dVdJY=; b=tplxf5XaSwWiBrUeBb9rW6Em3DuscJsE6zv5G7BgngQ90+V0am1KSdyKOFzGjMUiyb WK5dSkglCD3jTS9tG+AgJdY7lVs3uvlACWGBtNUO4LRS/MjGZCgoUPvQtIJ/Xavvqn/8 5jSkBQ9cqu6rUQgiofB7UcAYBDExMbPHvIMJQG17oASkrJvmFPaVG1B6hqTPBK1TpjxT rux9L/6OgNn6if5WWjY4V6hPxMsVUKhvpHgyg2YBhVdZJDEk3qTissytM1rAbfMSj70I AXK86QctT/c8uXtfNiv4TbWbFxMXwx4HAKjFGcMmO6rTo9HRrxdjOpdjda2rScv40ss6 PUqw== X-Gm-Message-State: AHPjjUiV/RtzeQ3/grJoBxHTSsbyOO8r5ZxNAW09+ydXgOsg/yWaM5kw BXXvxaB1jqwILjXjxXOzbw== X-Google-Smtp-Source: ADKCNb5AsVso9ORimOJeC4SVW44hZQ7SJpmX2DL1Gy01P237rLhUgcII5ruCMHabjJ0y4RUq/bVAew== X-Received: by 10.200.11.13 with SMTP id e13mr446688qti.215.1504643148958; Tue, 05 Sep 2017 13:25:48 -0700 (PDT) From: Adhemerval Zanella To: libc-alpha@sourceware.org Cc: Paul Eggert Subject: [PATCH 9/9] posix: Fix glob with GLOB_NOCHECK returning modified patterns (BZ#10246) Date: Tue, 5 Sep 2017 17:25:22 -0300 Message-Id: <1504643122-14874-10-git-send-email-adhemerval.zanella@linaro.org> In-Reply-To: <1504643122-14874-1-git-send-email-adhemerval.zanella@linaro.org> References: <1504643122-14874-1-git-send-email-adhemerval.zanella@linaro.org> According to POSIX glob with GLOB_NOCHECK should return a list consisting of only of the input pattern in case of no match. However GLIBC does not honor in case of '//' or '//' will be handle in same way. This patch fix it by using a empty directory name for the latter (since prefix_array already adds a slash as default for each entry). Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py for all major architectures. [BZ #10246] * posix/glob.c (glob): Handle pattern that do not match and start with '/' correctly. * posix/globtest.sh: New tests for NOCHECK. --- ChangeLog | 7 ++++++- posix/glob.c | 13 +++++++------ posix/globtest.sh | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 7 deletions(-) -- 2.7.4 diff --git a/posix/glob.c b/posix/glob.c index 30a4143..25c5d24 100644 --- a/posix/glob.c +++ b/posix/glob.c @@ -272,6 +272,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), size_t oldcount; int meta; int dirname_modified; + /* Indicate if the directory should be prepended on return values. */ + bool dirname_prefix = true; int malloc_dirname = 0; glob_t dirs; int retval = 0; @@ -495,6 +497,10 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), dirname = (char *) "/"; dirlen = 1; ++filename; + /* prefix_array adds a separator for each result and DIRNAME is + already '/'. So we indicate later that we should not prepend + anything for this specific case. */ + dirname_prefix = false; } else { @@ -1086,7 +1092,7 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), if (dirlen > 0) { /* Stick the directory on the front of each name. */ - if (prefix_array (dirname, + if (prefix_array (dirname_prefix ? dirname : "", &pglob->gl_pathv[old_pathc + pglob->gl_offs], pglob->gl_pathc - old_pathc)) { @@ -1167,11 +1173,6 @@ prefix_array (const char *dirname, char **array, size_t n) size_t dirlen = strlen (dirname); char dirsep_char = '/'; - if (dirlen == 1 && dirname[0] == '/') - /* DIRNAME is just "/", so normal prepending would get us "//foo". - We want "/foo" instead, so don't prepend any chars from DIRNAME. */ - dirlen = 0; - #if defined __MSDOS__ || defined WINDOWS32 if (dirlen > 1) { diff --git a/posix/globtest.sh b/posix/globtest.sh index 73f7ae3..92a8e37 100755 --- a/posix/globtest.sh +++ b/posix/globtest.sh @@ -242,6 +242,43 @@ if test $failed -ne 0; then result=1 fi +# Test NOCHECK for specific cases where the pattern used starts +# with '/' (BZ#10246). +failed=0 +${test_program_prefix} \ +${common_objpfx}posix/globtest -c "$testdir" "/%" | +sort > $testout +cat <<"EOF" | $CMP - $testout >> $logfile || failed=1 +`/%' +EOF +if test $failed -ne 0; then + echo "No check test failed" >> $logfile + result=1 +fi + +${test_program_prefix} \ +${common_objpfx}posix/globtest -c "$testdir" "//%" | +sort > $testout +cat <<"EOF" | $CMP - $testout >> $logfile || failed=1 +`//%' +EOF +if test $failed -ne 0; then + echo "No check test failed" >> $logfile + result=1 +fi + +${test_program_prefix} \ +${common_objpfx}posix/globtest -c "$testdir" "///%" | +sort > $testout +cat <<"EOF" | $CMP - $testout >> $logfile || failed=1 +`///%' +EOF +if test $failed -ne 0; then + echo "No check test failed" >> $logfile + result=1 +fi + + # Test NOMAGIC without magic characters failed=0 ${test_program_prefix} \