From patchwork Fri Dec 17 20:45:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans-Peter Nilsson X-Patchwork-Id: 49069 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CC2033858031 for ; Fri, 17 Dec 2021 20:46:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CC2033858031 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639773977; bh=c3GYc0m2hTiUPPi8lKZPl2Zj2mIh85q4uwxH1yoaIs4=; h=To:In-Reply-To:Subject:References:Date:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=EN7uYHsHAtDPbSRpKk+ZfSv8H4qpUmVHnL0MF0/tUxQpl6TbLNXKSBZP0LXiHSHZ5 dowwYwHbIAUugi7XLbM3/PaShJvRG4m3UcbzzROy3Y88skAhgNIvicXar/Z2rPdeIg +H6kdbVMMeTrE5KK5nvri7r7ZVJr7MERwe/bZm0s= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from smtp1.axis.com (smtp1.axis.com [195.60.68.17]) by sourceware.org (Postfix) with ESMTPS id BD78E3858423 for ; Fri, 17 Dec 2021 20:45:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BD78E3858423 To: , Paul Eggert In-Reply-To: <949e52bb-05a6-5ae6-edd1-37382384a554@cs.ucla.edu> (message from Paul Eggert on Fri, 17 Dec 2021 03:51:50 +0100) Subject: [PATCH v3 2/2] timezone: test-case for BZ #28707 MIME-Version: 1.0 References: <20211217005744.E099F203C8@pchp3.se.axis.com> <949e52bb-05a6-5ae6-edd1-37382384a554@cs.ucla.edu> Message-ID: <20211217204554.9F6EA203B0@pchp3.se.axis.com> Date: Fri, 17 Dec 2021 21:45:54 +0100 X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_SHORT, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Hans-Peter Nilsson via Libc-alpha From: Hans-Peter Nilsson Reply-To: Hans-Peter Nilsson Cc: Christopher.Wong@axis.com Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Here's an alternative for the test-case, trivially generating the binary tzfile from a source. At first I though re-sending just the first version but split up as the first alternative, but on second thought that would just be undesired and confusing. Generating the file using the specific zic version *for the purpose of covering the fixed bug* would add a dependency to install exactly 2021d or 2021e only to be used by this test, and I don't think that's appropriate. Better use a shell-script and printf as suggested. Hopefully digestible for both maintainers and CI tools. Happy Holidays in advance. 8< ------------------------------------------------------ >8 This test-case is the tzfile for Asuncion generated by tzlib-2021e as follows, using the tzlib-2021e zic: "zic -d DEST -r @1546300800 -L /dev/null -b slim SOURCE/southamerica". Note that in its type 2 header, it has two entries in its "time-types" array (types), but only one entry in its "transition types" array (type_idxs). * timezone/Makefile, timezone/tst-pr28707.c, timezone/testdata/gen-XT5.sh: New test. Change-Id: I75122962b8e682b00c8f7241cb5bda56adb3d3a3 Co-authored-by: Christopher Wong --- timezone/Makefile | 8 +++++++- timezone/testdata/gen-XT5.sh | 16 +++++++++++++++ timezone/tst-bz28707.c | 46 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100755 timezone/testdata/gen-XT5.sh create mode 100644 timezone/tst-bz28707.c diff --git a/timezone/Makefile b/timezone/Makefile index c624a189b322..f091663b8bbb 100644 --- a/timezone/Makefile +++ b/timezone/Makefile @@ -23,7 +23,7 @@ subdir := timezone include ../Makeconfig others := zdump zic -tests := test-tz tst-timezone tst-tzset +tests := test-tz tst-timezone tst-tzset tst-bz28707 generated-dirs += testdata @@ -85,10 +85,12 @@ $(objpfx)tst-timezone.out: $(addprefix $(testdata)/, \ America/Sao_Paulo Asia/Tokyo \ Europe/London) $(objpfx)tst-tzset.out: $(addprefix $(testdata)/XT, 1 2 3 4) +$(objpfx)tst-bz28707.out: $(testdata)/XT5 test-tz-ENV = TZDIR=$(testdata) tst-timezone-ENV = TZDIR=$(testdata) tst-tzset-ENV = TZDIR=$(testdata) +tst-bz28707-ENV = TZDIR=$(testdata) # Note this must come second in the deps list for $(built-program-cmd) to work. zic-deps = $(objpfx)zic $(leapseconds) yearistype @@ -122,6 +124,10 @@ $(testdata)/XT%: testdata/XT% $(make-target-directory) cp $< $@ +$(testdata)/XT%: testdata/gen-XT%.sh + $(SHELL) $< > $@.tmp + mv $@.tmp $@ + $(objpfx)tzselect: tzselect.ksh $(common-objpfx)config.make sed -e 's|TZDIR=[^}]*|TZDIR=$(zonedir)|' \ -e '/TZVERSION=/s|see_Makefile|"$(version)"|' \ diff --git a/timezone/testdata/gen-XT5.sh b/timezone/testdata/gen-XT5.sh new file mode 100755 index 000000000000..3cea0569eb5a --- /dev/null +++ b/timezone/testdata/gen-XT5.sh @@ -0,0 +1,16 @@ +#! /bin/sh + +# This test-case is the tzfile for America/Asuncion +# generated by tzlib-2021e as follows, using the tzlib-2021e +# zic: "zic -d DEST -r @1546300800 -L /dev/null -b slim +# SOURCE/southamerica". Note that in its type 2 header, it +# has two entries in its "time-types" array (types), but +# only one entry in its "transition types" array +# (type_idxs). + +printf \ +'TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'\ +'\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0TZif2\0\0\0\0\0\0\0\0'\ +'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\2\0\0\0\b\0'\ +'\0\0\0\*\255\200\1\0\0\0\0\0\0\377\377\325\320\1\4-00\0-03\0\n'\ +'<-04>4<-03>,M10.1.0/0,M3.4.0/0\n' diff --git a/timezone/tst-bz28707.c b/timezone/tst-bz28707.c new file mode 100644 index 000000000000..0a9df1e9a094 --- /dev/null +++ b/timezone/tst-bz28707.c @@ -0,0 +1,46 @@ +/* Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include + +/* Test that we can use a truncated timezone-file, where the time-type + at index 0 is not indexed by the transition-types array (and the + transition-types array does not contain at least both one DST and one + normal time members). */ + +static int +do_test (void) +{ + if (setenv ("TZ", "XT5", 1)) + { + puts ("setenv failed."); + return 1; + } + + tzset (); + + return + /* Sanity-check that we got the right timezone-name for DST. For + normal time, we're likely to get "-00" (the "unspecified" marker), + even though the POSIX timezone string says "-04". Let's not test + that. */ + !(strcmp (tzname[1], "-03") == 0); +} +#include