Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package file for openSUSE:Factory checked in at 2022-07-29 16:46:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/file (Old) and /work/SRC/openSUSE:Factory/.file.new.1533 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "file" Fri Jul 29 16:46:51 2022 rev:129 rq:990574 version:5.42 Changes: -------- --- /work/SRC/openSUSE:Factory/file/file.changes 2022-06-16 18:19:39.668032948 +0200 +++ /work/SRC/openSUSE:Factory/.file.new.1533/file.changes 2022-07-29 16:46:53.638485071 +0200 @@ -1,0 +2,11 @@ +Wed Jul 13 11:01:16 UTC 2022 - Dr. Werner Fink <wer...@suse.de> + +- Add upstream patch to fix boo#1201350 + * file-boo1201350.patch which combines the commits + c80065fe6900be5e794941e29b32440e9969b1c3 + 7e59d34206d7c962e093d4239e5367a2cd8b7623 + f042050f59bfc037677871c4d1037c33273f5213 + d471022b2772071877895759f209f2c346757a4c + 441ac2b15508909e82ad467960df4ac0adf9644c + +------------------------------------------------------------------- New: ---- file-boo1201350.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ file.spec ++++++ --- /var/tmp/diff_new_pack.PRHx7E/_old 2022-07-29 16:46:55.230489498 +0200 +++ /var/tmp/diff_new_pack.PRHx7E/_new 2022-07-29 16:46:55.234489509 +0200 @@ -62,7 +62,8 @@ Patch32: file-5.19-clicfs.dif Patch37: file-secure_getenv.patch Patch39: file-5.28-btrfs-image.dif -# Upstream commits as patches +# Upstream commits as patch +Patch42: file-boo1201350.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %global _sysconfdir /etc %global _miscdir %{_datadir}/misc @@ -106,6 +107,7 @@ %prep %setup -q -n file-%{version} +%patch42 -p0 %patch1 -p0 -b .misc %patch4 -p0 -b .conf %patch5 -p0 -b .tex @@ -124,6 +126,7 @@ %patch32 -p0 -b .clicfs %patch37 -p1 -b .getenv %patch39 -p1 -b .btrfs + %patch -b .0 test -s src/magic.h.in || cp -p src/magic.h src/magic.h.in rm -fv src/magic.h ++++++ file-boo1201350.patch ++++++ >From c80065fe6900be5e794941e29b32440e9969b1c3 Mon Sep 17 00:00:00 2001 From: Christos Zoulas <chris...@zoulas.com> Date: Mon, 4 Jul 2022 19:44:35 +0000 Subject: [PATCH 1/5] PR/362: ro-ee: fix wide char printing --- src/file.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++------------- src/file.h | 4 +- src/funcs.c | 4 +- 3 files changed, 81 insertions(+), 24 deletions(-) --- src/file.c +++ src/file.c 2022-07-21 13:56:33.280169243 +0000 @@ -60,6 +60,12 @@ FILE_RCSID("@(#)$File: file.c,v 1.195 20 #ifdef HAVE_WCTYPE_H #include <wctype.h> #endif +#if defined(HAVE_WCHAR_H) && defined(HAVE_MBRTOWC) && defined(HAVE_WCWIDTH) && \ + defined(HAVE_WCTYPE_H) +#define FILE_WIDE_SUPPORT +#else +#include <ctype.h> +#endif #if defined(HAVE_GETOPT_H) && defined(HAVE_STRUCT_OPTION) # include <getopt.h> @@ -544,6 +550,58 @@ unwrap(struct magic_set *ms, const char return e; } +private void +file_octal(unsigned char c) +{ + putc('\\', stdout); + putc(((c >> 6) & 7) + '0', stdout); + putc(((c >> 3) & 7) + '0', stdout); + putc(((c >> 0) & 7) + '0', stdout); +} + +private void +fname_print(const char *inname) +{ + size_t n = strlen(inname); +#ifdef FILE_WIDE_SUPPORT + mbstate_t state; + wchar_t nextchar; + size_t bytesconsumed; + + + (void)memset(&state, 0, sizeof(state)); + while (n > 0) { + bytesconsumed = mbrtowc(&nextchar, inname, n, &state); + if (bytesconsumed == CAST(size_t, -1) || + bytesconsumed == CAST(size_t, -2)) { + nextchar = *inname++; + n--; + (void)memset(&state, 0, sizeof(state)); + file_octal(CAST(unsigned char, nextchar)); + continue; + } + inname += bytesconsumed; + n -= bytesconsumed; + if (iswprint(nextchar)) { + printf("%lc", nextchar); + continue; + } + /* XXX: What if it is > 255? */ + file_octal(CAST(unsigned char, nextchar)); + } +#else + size_t i; + for (i = 0; i < n; i++) { + unsigned char c = CAST(unsigned char, inname[i]); + if (isprint(c)) { + putc(c); + continue; + } + file_octal(c); + } +#endif +} + /* * Called for each input file on the command line (or in a list of files) */ @@ -553,15 +611,13 @@ process(struct magic_set *ms, const char const char *type, c = nulsep > 1 ? '\0' : '\n'; int std_in = strcmp(inname, "-") == 0; int haderror = 0; - size_t plen = 4 * wid + 1; - char *pbuf, *pname; - - if ((pbuf = CAST(char *, malloc(plen))) == NULL) - file_err(EXIT_FAILURE, "Can't allocate %zu bytes", plen); if (wid > 0 && !bflag) { - pname = file_printable(ms, pbuf, plen, inname, wid); - (void)printf("%s", std_in ? "/dev/stdin" : pname); + const char *pname = std_in ? "/dev/stdin" : inname; + if ((ms->flags & MAGIC_RAW) == 0) + fname_print(pname); + else + (void)printf("%s", pname); if (nulsep) (void)putc('\0', stdout); if (nulsep < 2) { @@ -580,7 +636,6 @@ process(struct magic_set *ms, const char } if (nobuffer) haderror |= fflush(stdout) != 0; - free(pbuf); return haderror || type == NULL; } @@ -588,35 +643,37 @@ protected size_t file_mbswidth(struct magic_set *ms, const char *s) { size_t width = 0; -#if defined(HAVE_WCHAR_H) && defined(HAVE_MBRTOWC) && defined(HAVE_WCWIDTH) && \ - defined(HAVE_WCTYPE_H) - size_t bytesconsumed, old_n, n; +#ifdef FILE_WIDE_SUPPORT + size_t bytesconsumed, n; mbstate_t state; wchar_t nextchar; - (void)memset(&state, 0, sizeof(mbstate_t)); - old_n = n = strlen(s); + + (void)memset(&state, 0, sizeof(state)); + n = strlen(s); while (n > 0) { bytesconsumed = mbrtowc(&nextchar, s, n, &state); if (bytesconsumed == CAST(size_t, -1) || bytesconsumed == CAST(size_t, -2)) { - /* Something went wrong, return something reasonable */ - return old_n; + nextchar = *s; + bytesconsumed = 1; + (void)memset(&state, 0, sizeof(state)); + width += 4; + } else { + int w = wcwidth(nextchar); + width += ((ms->flags & MAGIC_RAW) != 0 + || iswprint(nextchar)) ? (w > 0 ? w : 1) : 4; } - width += ((ms->flags & MAGIC_RAW) != 0 - || iswprint(nextchar)) ? wcwidth(nextchar) : 4; s += bytesconsumed, n -= bytesconsumed; } - return width; #else while (*s) { width += (ms->flags & MAGIC_RAW) != 0 || isprint(CAST(unsigned char, *s)) ? 1 : 4; } - - return strlen(s); #endif + return width; } private void --- src/file.h +++ src/file.h 2022-07-21 13:56:33.280169243 +0000 @@ -575,7 +575,7 @@ protected size_t file_pstring_length_siz const struct magic *); protected size_t file_pstring_get_length(struct magic_set *, const struct magic *, const char *); -public char * file_printable(struct magic_set *, char *, size_t, +protected char * file_printable(struct magic_set *, char *, size_t, const char *, size_t); #ifdef __EMX__ protected int file_os2_apptype(struct magic_set *, const char *, const void *, --- src/funcs.c +++ src/funcs.c 2022-07-21 13:56:33.280169243 +0000 @@ -763,7 +763,7 @@ file_pop_buffer(struct magic_set *ms, fi /* * convert string to ascii printable format. */ -public char * +protected char * file_printable(struct magic_set *ms, char *buf, size_t bufsiz, const char *str, size_t slen) {