Path: csiph.com!xmission!news.snarked.org!news.linkpendium.com!news.linkpendium.com!panix!usenet.stanford.edu!not-for-mail From: Chet Ramey Newsgroups: gnu.bash.bug Subject: Re: [mapfile]: problem reentrance with normal file Date: Mon, 12 Nov 2018 09:43:53 -0500 Organization: ITS, Case Western Reserve University Lines: 46 Approved: bug-bash@gnu.org Message-ID: References: Reply-To: chet.ramey@case.edu NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Trace: usenet.stanford.edu 1542033850 24151 208.118.235.17 (12 Nov 2018 14:44:10 GMT) X-Complaints-To: action@cs.stanford.edu Cc: chet.ramey@case.edu To: Didou Serge , bug-bash@gnu.org, bash@packages.debian.org Envelope-to: bug-bash@gnu.org X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:cc:subject:to:references:from:openpgp :autocrypt:organization:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=iu62Nj1c63f6d5mXTFP7pZhykSmqY/FbIhRNyz0rtCc=; b=kRKLgQB/tBfTF0hYeLEdqNy99k9Xsqv1bVb/3u8kwlhHcME121q64Vv2ZhxhnJjlGf 8D3FnIOyF1DoJ0kMmiHUnx1uGRTD5J+xTVbugk63ydUU6Qf2vxavmO1K7XmA0dUUoZ9K 9diveneEZe6wDD2CbjJNzQ1Rmwye2EXya+YFtvEmYWEkeI+UtVBgFGEx54pTMudI5xdW Ga7ADVG8sDBWx2iDA9pYjQ+LFA6zXMxoIYCwg3lZixTgKPq1FRB6J2n3fXCglbXL/0Es 3pUw27bNM+scTu6NXoAHhqPHxPP6yUCghXMNrkh1+dkv8zck6pz5Y0JgkCHAlBW/EIQm qfaA== X-Gm-Message-State: AGRZ1gLWWsWS2BqlIU+PeQWSLJKaxdk61Xjd4eDjjuTiI0QKk9cSI9l0 KNTgIlG6rgtz8fzTh/h74Qtprh0m6QyL4ebclA6j2/u7LW7f3La8wxfaYB4wYWg5QeYaV3iH73F TSRl5zS4C2ww= X-Received: by 2002:a24:d30c:: with SMTP id n12mr3214252itg.50.1542033839171; Mon, 12 Nov 2018 06:43:59 -0800 (PST) X-Google-Smtp-Source: AJdET5eebnJFzMpaNPqrl/xc3wMS/cYUuSCgyFbTEZElSfU+JteK4a/phimuMV4nclRXGpl8w2Wjpg== X-Received: by 2002:a24:d30c:: with SMTP id n12mr3214241itg.50.1542033838874; Mon, 12 Nov 2018 06:43:58 -0800 (PST) Openpgp: preference=signencrypt Autocrypt: addr=chet.ramey@case.edu; prefer-encrypt=mutual; keydata= xsDiBEEOsGwRBACFa0A1oa71HSZLWxAx0svXzhOZNQZOzqHmSuGOG92jIpQpr8DpvgRh40Yp AwdcXb8QG1J5yGAKeevNE1zCFaA725vGSdHUyypHouV0xoWwukYO6qlyyX+2BZU+okBUqoWQ koWxiYaCSfzB2Ln7pmdys1fJhcgBKf3VjWCjd2XJTwCgoFJOwyBFJdugjfwjSoRSwDOIMf0D /iQKqlWhIO1LGpMrGX0il0/x4zj0NAcSwAk7LaPZbN4UPjn5pqGEHBlf1+xDDQCkAoZ/VqES GZragl4VqJfxBr29Ag0UDvNbUbXoxQsARdero1M8GiAIRc50hj7HXFoERwenbNDJL86GPLAQ OTGOCa4W2o29nFfFjQrsrrYHzVtyA/9oyKvTeEMJ7NA3VJdWcmn7gOu0FxEmSNhSoV1T4vP2 1Wf7f5niCCRKQLNyUy0wEApQi4tSysdz+AbgAc0b/bHYVzIf2uO2lIEZQNNt+3g2bmXgloWm W5fsm/di50Gm1l1Na63d3RZ00SeFQos6WEwLUHEB0yp6KXluXLLIZitEJM0aQ2hldCBSYW1l eSA8Y2hldEBjd3J1LmVkdT7CYQQTEQIAIQIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAUCQ+La kQIZAQAKCRC7WGnwZOp0q9rGAJ4sRGLmlF8klZTH75z7jyQScpU6aACeNMahjWIhumt4u96d 9mdMJqlabVnOwE0EQQ6wbxAEAJCukwDigRDPhAuI+lf+6P64lWanIFOXIndqhvU13cDbQ/Wt 5LwPzm2QTvd7F+fcHOgZ8KOFScbDpjJaRqwIybMTcIN0B2pBLX/C10W1aY+cUrXZgXUGVISE MmpaP9v02auToo7XXVEHC+XLO9IU7/xaU98FL69l6/K4xeNSBRM/AAMHA/wNAmRBpcyK0+Vg gZ5esQaIP/LyolAm2qwcmrd3dZi+g24s7yjV0EUwvRP7xHRDQFgkAo6++QbuecU/J90lxrVn QwucZmfz9zgWDkT/MpfB/CNRSKLFjhYq2yHmHWT6vEjw9Ry/hF6Pc0oh1a62USdfaKAiim0n VxxQmPmiRvtCmcJJBBgRAgAJBQJBDrBvAhsMAAoJELtYafBk6nSr43AAn2ZZFQg8Gs/zUzvX Mt7evaFqVTzcAJ0cHtKpP1i/4H4R9+OsYeQdxxWxTQ== User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 In-Reply-To: Content-Language: en-US X-Junkmail-Status: score=8/90, host=mpv2-2015.case.edu X-Junkmail-PrAS-Raw: score=8/90, refid=2.7.2:2018.11.12.141217:17:8.129, ip=, rules=__YOUTUBE_RCVD, __X_GOOGLE_DKIM_SIGNATURE, __HAS_REPLYTO, __HAS_CC_HDR, __SUBJ_REPLY, __PHISH_SPEAR_SUBJ_ALERT, __BOUNCE_CHALLENGE_SUBJ, __BOUNCE_NDR_SUBJ_EXEMPT, __SUBJ_ALPHA_END, __TO_MALFORMED_2, __TO_NAME, __TO_NAME_DIFF_FROM_ACC, __REFERENCES, __HAS_FROM, FROM_EDU_TLD, __HAS_MSGID, __SANE_MSGID, DATE_TZ_NA, __USER_AGENT, __MOZILLA_USER_AGENT, __MIME_VERSION, __IN_REP_TO, __CT, __CT_TEXT_PLAIN, __CTE, __REPLYTO_SAMEAS_FROM_ADDY, __REPLYTO_SAMEAS_FROM_ACC, __FROM_DOMAIN_IN_ANY_CC1, __FROM_DOMAIN_IN_ANY_CC2, __REPLYTO_SAMEAS_FROM_DOMAIN, __ANY_URI, __URI_WITH_PATH, __URI_NO_WWW, __CP_URI_IN_BODY, __FRAUD_MONEY_CURRENCY_DOLLAR, __SUBJ_ALPHA_NEGATE, __LINES_OF_YELLING, __URI_IN_BODY, __URI_NOT_IMG, __FORWARDED_MSG, __NO_HTML_TAG_RAW, BODYTEXTP_SIZE_3000_LESS, BODY_SIZE_1800_1899, __MIME_TEXT_P1, __MIME_TEXT_ONLY, LINES_OF_YELLING_3, __URI_NS, HTML_00_01, [TRUNCATED], so=2010-03-03 19:42:08, dmn=2016-08-03-0138 X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020203.5BE991B0.0056,ss=1,re=0.000,fgs=0, ip=24.56.136.243, so=2016-11-06 16:00:04, dmn=2011-05-27 18:58:46 X-Mirapoint-Loop-Id: 970b775e2533df0bd7b343dccdc9038a X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 129.22.103.227 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com gnu.bash.bug:14796 On 11/11/18 3:32 PM, Didou Serge wrote: > Bash Version: 4.4 > Patch Level: 7 > Release Status: release > > Description: > When use mapfile from normal file that call function that use mapfile, the > first mapfile lost data. > > Repeat-By: > I create 3 functions: > ww(){ echo "$@" | mapfile -C yy -c 1 -t TT ; } > xx(){ mapfile -C yy -c 1 -t TT < <(echo "$@") ; } > yy(){ echo "$@" ;} > > I create 1 normal file: > echo -e "Premiere ligne" A{1..45} "\nDeuxieme ligne" B{1..45} "\nTroisieme > ligne" C{1..45} >fic.txt > [...] > This not work (lost data in second line and after) : > mapfile -C xx -c 1 UU 0 0 Premiere ligne A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 > A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28 A29 A30 A31 A32 A33 A34 A35 > A36 A37 A38 A39 A40 A41 A42 A43 A44 A45 > 0 1 B17 B18 B19 B20 B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31 B32 B33 > B34 B35 B36 B37 B38 B39 B40 B41 B42 B43 B44 B45 > 0 2 ligne C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 C18 > C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 C30 C31 C32 C33 C34 C35 C36 C37 > C38 C39 C40 C41 C42 C43 C44 C45 This is a buffering issue caused by nested calls to mapfile in the same process. The first call to mapfile reads a bufferful of data from the input file, and the second mapfile (the one executed as part of the callback) reads data into that same buffer. When the second call finishes, and the first mapfile is called again, the remaining characters in the buffer have already been discarded. It's not safe to call mapfile as part of a callback to a mapfile invocation. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU chet@case.edu http://tiswww.cwru.edu/~chet/