From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24686 invoked by alias); 20 Sep 2015 05:14:03 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 36566 Received: (qmail 6398 invoked from network); 20 Sep 2015 05:14:03 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.0 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:message-id:date:to:subject:mime-version :content-type; bh=UKOQkXJOsavvLZzcuuUkO0yfQvFE7/eusAwbxIX2V7Y=; b=ElAl3BBELzWgGElFZO/HDQ0/U96G74fwKXZNbuEnl8PK2VOFWW7msQdiL8Exdis48R Lu2DPOoWuZ1FOVsnF6hrNx1voQihvzxJwj5t5D8MarTn2EqL9BDDkx+bIf5nwiJh/pE2 FmwGRtLPp/7mic+2FtVWZpsjXkAJp0K1RtNYauea71H1mqGCCyrBvcvBqcGn0fpK2lJD qQYe1I6j8idb/YkY3iNaQWjK7rmJoGyhoRpmF79PNEuDzzmbkSU+yWS1ZmlyQpQLZkDW c4RdO/eSTF1jKqXFzMXT2J1cYPVry38lltEVBkNfqXHkZaWMy80yLPhE3mL0oFrcTY/w cHKA== X-Gm-Message-State: ALoCoQk8JAbHNp6p71p08PBFuSCioOayUsW4Cyemj9BiT+Ss+7IjF17y5kbBJ5qhgSyZQDeBBMDS X-Received: by 10.202.80.83 with SMTP id e80mr7739344oib.51.1442726038830; Sat, 19 Sep 2015 22:13:58 -0700 (PDT) From: Bart Schaefer Message-Id: <150919221356.ZM4681@torch.brasslantern.com> Date: Sat, 19 Sep 2015 22:13:56 -0700 X-Mailer: OpenZMail Classic (0.9.2 24April2005) To: zsh-workers@zsh.org Subject: lseek() on directories, again MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Here's another case like the one in exec.c (reported in 36350) where we should not be calling lseek() on a directory opened for reading. diff --git a/Src/parse.c b/Src/parse.c index 7c2d202..a26df6f 100644 --- a/Src/parse.c +++ b/Src/parse.c @@ -3227,6 +3227,8 @@ build_dump(char *nam, char *dump, char **files, int ali, int map, int flags) noaliases = ali; for (hlen = FD_PRELEN, tlen = 0; *files; files++) { + struct stat st; + if (!strcmp(*files, "-k")) { flags = (flags & ~(FDHF_KSHLOAD | FDHF_ZSHLOAD)) | FDHF_KSHLOAD; continue; @@ -3235,6 +3237,7 @@ build_dump(char *nam, char *dump, char **files, int ali, int map, int flags) continue; } if ((fd = open(*files, O_RDONLY)) < 0 || + fstat(fd, &st) != 0 || !S_ISREG(st.st_mode) || (flen = lseek(fd, 0, 2)) == -1) { if (fd >= 0) close(fd);