From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 18520 invoked from network); 20 Mar 2021 15:16:14 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 20 Mar 2021 15:16:14 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1616253374; b=oEnEgvytV3Xijik5Qq6srMzJhIcgdL7nH79tyPXxv9jjh0ligeMhz4OIf1gUjzL4MAnS5vmvS8 vaHTDOmY0hu22VV5tNh41Nzh7DWENfIUEtZMaHpL83w+pBHni6sOWtxE8Ff06AP6sw3Jgeay16 Kgk1NHN0UEy4jNbDR043GNIXqtM8QVCc37Tym2myhlIvyCzVoLj6/UMoZ2puvXa0odynaMsPP5 oVQEoRCXS+4EYO452l39ms7hvzV0wk8wB+z2AsUcHM0FnQpT58f5eDochNKoIuxIRIooGqLdGZ hSa4Fwg4GSzIjH5qGhzQxedmApc2GIssni/nflS/x09cJQ==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-lf1-f48.google.com) smtp.remote-ip=209.85.167.48; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1616253374; bh=lZ4O/hR1L0tGJ4BeiOeneBJT3clpa+hueSsSHSSU3ME=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:References:In-Reply-To:Message-ID:Date:Subject:To:From: DKIM-Signature:DKIM-Signature; b=PVHqPxLKi39kLRWL2S/8oZVFWBFdLxu8DvOB1IEN0nZsVCvHy98//R9+UQeFnShbIAxEyUNGcr k+cDmpES1m9QvgoaaVLJbEGROuLGaUpt7nqqkBQ+Ujf4tt/s/HYd6uXIo2QVfrKwZeQy89cKLq GegpyuyF3J6ZB8lXZZjU6v1/KxuJHFmc/edwFtGEvxObg4ZY19JHQE3uwkeyK/zcstdSt/1p4U 1BbyrENZYjjppNVzkbpS/qHf/zGF2qkBgS3GdUV5PZgjc/Qdz9FkqfDXTEmIbgXz3HhcgtNxOI KR90VOluqEausk1jKhb9XQz5GMIn0TvHr/QuBMBln2k/ow==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:References:In-Reply-To:Message-Id: Date:Subject:To:From:Reply-To:Cc:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=e4r+qTmmI9pdwqjFiqufjNIkM+kEyTng7RBUP4dsJ5Q=; b=At/hG/c1ohHKL6t+OVhREACANo V9edErzXoUOLYZA0uH+ROwe0imELDBvD46Lo6Aw0tRFVtZsUbEOhHcefHj0xz0CEzRjrfgy80SK5/ tjJbrfy3lgQ+mAJw2q40tbJ8v9fuZFVxFuyGD73HJszHxQBId378xkpSylx8geTyj4JoZvYa/tKV/ fCXh6/q46nuqs7F7Ecr0zm3dTpf6yNAD4SLssW0E4nhucH9PgYTGcsvod1I+txIshah/hbaE65knt YdslezXOqUKtIY+XIAD2G5xVnxXqg/zGdxGo3/VcsYZWN7KWQaCXa8gnR+6Y7JA2Npcjg7K+ecXBy KI3pAP/A==; Received: from authenticated user by zero.zsh.org with local id 1lNdKo-000I5Z-CD; Sat, 20 Mar 2021 15:16:14 +0000 Authentication-Results: zsh.org; iprev=pass (mail-lf1-f48.google.com) smtp.remote-ip=209.85.167.48; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-lf1-f48.google.com ([209.85.167.48]:36622) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1lNdKZ-000Hx9-Gd; Sat, 20 Mar 2021 15:16:00 +0000 Received: by mail-lf1-f48.google.com with SMTP id n138so14548852lfa.3 for ; Sat, 20 Mar 2021 08:15:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=e4r+qTmmI9pdwqjFiqufjNIkM+kEyTng7RBUP4dsJ5Q=; b=V4fYtxJQDfculugnoj2h0GHpnB42awPFaaUf0tLTJUu8XiZDu0ef14Kl+zy4wU4Tu8 muJi0zDD4d+dEbLvQeOab12v407GSVdYWo9iaFgnd+jJJ5Z6oJIO6xJlifVJQKf+dw7v cUu/je1gzPsRM+aYcUXZP8BBsc7XQWw4+PSI2IjfD6tGpK+v97yIIGzBcP1WCWYbFVf+ bp6eEUFEveIgdALT8ER29gwghWQrxkxhHVC003tvB1p0kZsQzadgToW8c9hsUsIkrCe5 XyGvTYw15pSH74WDM+5uh9JMArVL3YnhtgjKFR0rvb5TBV3M8T9P0/QIwZMgTblHCOTU GLvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=e4r+qTmmI9pdwqjFiqufjNIkM+kEyTng7RBUP4dsJ5Q=; b=HE2QYgzf39p9jPMUjhmL81oy8iX6EOArheoDasd6hKpUfckXK3wB/Nt4/KOqDfJ6zo imSzVPbm/5HvRPN/xwczEiKsGhdgp19FA03TLIFP7RgE4LvDMHsRMlmEooB6822jfcf1 Do2RQ6TLHrLNGtuk4o/3ETL8avSzfw9KlR6Lg2ZbZtVp+qJgNriIMWX1PWcNxN5dd2Yl BEwKaA9pETJKdoSOdo1GyuovhfyLGBUnzRRzvSIqmsSsqC7AvtwqUejckuE6lBmV+7n5 MDlNw2Ft4+SzHejYr/nqQmajWl87/eKJPyE4G1DSdPUsDwRKp3ZSceFxk2zR4xeOV9g0 zOvg== X-Gm-Message-State: AOAM531GaAX74bKEduCymNBD/pvaI5+wlVChWzgnSJO2HQeUkNushY8E 2M/ZnWmYqSEiBQ75dQj5bnpVjMhhvDg= X-Google-Smtp-Source: ABdhPJzhId2MpyVsfxxXugybBGUGCbo3urT8K+2lO6sGQOzd3fw6CMjPeUEXLohlrzCjweo9dYGBWg== X-Received: by 2002:a05:6512:3ba4:: with SMTP id g36mr2604485lfv.376.1616253358617; Sat, 20 Mar 2021 08:15:58 -0700 (PDT) Received: from localhost.localdomain (h-88-110.A230.priv.bahnhof.se. [212.85.88.110]) by smtp.gmail.com with ESMTPSA id p25sm1121078ljn.61.2021.03.20.08.15.57 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 20 Mar 2021 08:15:57 -0700 (PDT) From: Mikael Magnusson To: zsh-workers@zsh.org Subject: PATCH v2: 48168: Fix handling of NUL bytes in zexpandtabs multibyte version Date: Sat, 20 Mar 2021 16:15:51 +0100 Message-Id: <20210320151551.29509-1-mikachu@gmail.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <485a976d-bcd6-4fcc-a4cc-c4e1831e9151@www.fastmail.com> References: <485a976d-bcd6-4fcc-a4cc-c4e1831e9151@www.fastmail.com> X-Seq: 48202 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --- Src/utils.c | 5 ++++- Test/B03print.ztst | 9 +++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Src/utils.c b/Src/utils.c index 8fcea5362a..f8cbe65ba5 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -5936,8 +5936,11 @@ zexpandtabs(const char *s, int len, int width, int startpos, FILE *fout, memset(&mbs, 0, sizeof(mbs)); s++; len--; - } else if (ret == MB_INCOMPLETE) { + } else if (ret == MB_INCOMPLETE || /* incomplete at end --- assume likewise, best we've got */ + ret == 0) { + /* NUL character returns 0, which would loop infinitely, so advance + * one byte in this case too */ s++; len--; } else { diff --git a/Test/B03print.ztst b/Test/B03print.ztst index 5634239346..d8618de7d4 100644 --- a/Test/B03print.ztst +++ b/Test/B03print.ztst @@ -304,15 +304,16 @@ foo=$'one\ttwo\tthree\tfour\n' foo+=$'\tone\ttwo\tthree\tfour\n' foo+=$'\t\tone\t\ttwo\t\tthree\t\tfour' - print -x4 $foo - print -X4 $foo + foo+='\0' # regression test for multibyte tab expand + print -x4 $foo | sed 's/\x00/nul/' # avoid raw nul byte in expected output below + print -X4 $foo | sed 's/\x00/nul/' 0:Tab expansion by print >one two three four > one two three four -> one two three four +> one two three fournul >one two three four > one two three four -> one two three four +> one two three fournul unset foo print -v foo once more -- 2.15.1