From 5583ed7061b866eb0258c65c7ac783595be8ba0a Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Tue, 31 Jan 2023 17:00:06 +0100 Subject: [PATCH] Auto-sync with upstream branch master Upstream commit: 2f39e44a8417b4186a7f15bfeac5d0b557e63e03 - Account for octal marker in %#o format (rhbz#2165869) - Use binutils 2.40 branch in build-many-glibcs.py - Use MPFR 4.2.0, MPC 1.3.1 in build-many-glibcs.py - Apply glibc-dprintf-length.patch to fix dprintf return value regression. --- glibc-dprintf-length.patch | 87 ++++++++++++++++++++++++++++++++++++++ glibc.spec | 13 +++++- 2 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 glibc-dprintf-length.patch diff --git a/glibc-dprintf-length.patch b/glibc-dprintf-length.patch new file mode 100644 index 0000000..a75107c --- /dev/null +++ b/glibc-dprintf-length.patch @@ -0,0 +1,87 @@ +Author: Florian Weimer +Date: Tue Jan 31 09:44:16 2023 +0100 + + libio: Update number of written bytes in dprintf implementation + + The __printf_buffer_flush_dprintf function needs to record that + the buffer has been written before reusing it. Without this + accounting, dprintf always returns zero. + + Fixes commit 8ece45e4f586abd212d1c02d74d38ef681a45600 + ("libio: Convert __vdprintf_internal to buffers"). + +diff --git a/libio/iovdprintf.c b/libio/iovdprintf.c +index fb359d263de3428c..d9fa886fdf3e2f53 100644 +--- a/libio/iovdprintf.c ++++ b/libio/iovdprintf.c +@@ -54,6 +54,7 @@ __printf_buffer_flush_dprintf (struct __printf_buffer_dprintf *buf) + } + p += ret; + } ++ buf->base.written += buf->base.write_ptr - buf->base.write_base; + buf->base.write_ptr = buf->buf; + } + +diff --git a/stdio-common/Makefile b/stdio-common/Makefile +index da3034d847578074..34fdd6d1f890c282 100644 +--- a/stdio-common/Makefile ++++ b/stdio-common/Makefile +@@ -180,6 +180,7 @@ tests := \ + tst-bz11319 \ + tst-bz11319-fortify2 \ + tst-cookie \ ++ tst-dprintf-length \ + tst-fdopen \ + tst-ferror \ + tst-fgets \ +diff --git a/stdio-common/tst-dprintf-length.c b/stdio-common/tst-dprintf-length.c +new file mode 100644 +index 0000000000000000..abe2caf45aa46255 +--- /dev/null ++++ b/stdio-common/tst-dprintf-length.c +@@ -0,0 +1,45 @@ ++/* Test that dprintf returns the expected length. ++ Copyright (C) 2023 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 ++#include ++ ++static int ++do_test (void) ++{ ++ /* Use a datagram socket to check that everything arrives in one packet. ++ The dprintf function should perform a single write call. */ ++ int fds[2]; ++ TEST_VERIFY_EXIT (socketpair (AF_LOCAL, SOCK_DGRAM, 0, fds) == 0); ++ ++ TEST_COMPARE (dprintf (fds[0], "(%d)%s[%d]", 123, "---", 4567), 14); ++ ++ char buf[32]; ++ ssize_t ret = read (fds[1], buf, sizeof (buf)); ++ TEST_VERIFY_EXIT (ret > 0); ++ TEST_COMPARE_BLOB (buf, ret, "(123)---[4567]", strlen ("(123)---[4567]")); ++ ++ close (fds[1]); ++ close (fds[0]); ++ return 0; ++} ++ ++#include diff --git a/glibc.spec b/glibc.spec index 1d25069..3db9305 100644 --- a/glibc.spec +++ b/glibc.spec @@ -1,4 +1,4 @@ -%global glibcsrcdir glibc-2.36.9000-453-g0d50f477f4 +%global glibcsrcdir glibc-2.36.9000-456-g2f39e44a84 %global glibcversion 2.36.9000 # Pre-release tarballs are pulled in from git using a command that is # effectively: @@ -159,7 +159,7 @@ Version: %{glibcversion} # - It allows using the Release number without the %%dist tag in the dependency # generator to make the generated requires interchangeable between Rawhide # and ELN (.elnYY < .fcXX). -%global baserelease 24 +%global baserelease 25 Release: %{baserelease}%{?dist} # In general, GPLv2+ is used by programs, LGPLv2+ is used for @@ -230,6 +230,7 @@ Patch9: glibc-rh827510.patch Patch13: glibc-fedora-localedata-rh61908.patch Patch17: glibc-cs-path.patch Patch23: glibc-python3.patch +Patch24: glibc-dprintf-length.patch ############################################################################## # Continued list of core "glibc" package information: @@ -2193,6 +2194,14 @@ update_gconv_modules_cache () %files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared %changelog +* Tue Jan 31 2023 Florian Weimer - 2.36.9000-25 +- Apply glibc-dprintf-length.patch to fix dprintf return value regression. +- Auto-sync with upstream branch master, + commit 2f39e44a8417b4186a7f15bfeac5d0b557e63e03: +- Account for octal marker in %#o format (rhbz#2165869) +- Use binutils 2.40 branch in build-many-glibcs.py +- Use MPFR 4.2.0, MPC 1.3.1 in build-many-glibcs.py + * Wed Jan 25 2023 Florian Weimer - 2.36.9000-24 - Auto-sync with upstream branch master, commit 0d50f477f47ba637b54fb03ac48d769ec4543e8d: