Source: nn Version: 6.7.3-14 Severity: normal Tags: patch Dear Maintainer,
>From e444b6861b5c3ffe68784350cd357a0e57fe8eda Mon Sep 17 00:00:00 2001 >From: Bjarni Ingi Gislason <bjarn...@rhi.hi.is> >Date: Wed, 3 Mar 2021 00:56:47 +0000 >Subject: [PATCH] pack_name.c: add the case for an escape (\\) and add > parentheses around defined macros Add the first parentheses to "CL_SEP" and the second at the end of the line where "CL_SEP" is used, to avoid warnings from the compiler of type: pack_name.c:30:17: warning: suggest parentheses around arithmetic in operand of '|' [-Wparentheses] 30 | #define CL_SEP | 0x4000 + /* address separator */ | ^ pack_name.c:78:25: note: in expansion of macro 'CL_SEP' 78 | /* ! */ CL_SPACE CL_SEP SEP_BANG, | ^~~~~~ Add parentheses around "Classic[c]" and "CL_RANGE" to avoid warnings of type: pack_name.c:35:34: warning: suggest parentheses around '+' in operand of '&' [-Wparentheses] 35 | #define BEGIN_RANGE(c) (Class[c] & CL_RANGE(0)) | ^ Add the case for an escape (\\). Signed-off-by: Bjarni Ingi Gislason <bjarn...@rhi.hi.is> --- pack_name.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/pack_name.c b/pack_name.c index 7441854..e99963f 100644 --- a/pack_name.c +++ b/pack_name.c @@ -27,16 +27,21 @@ #define CL_RANGE(c) 0x0800+c/* space range, end with c */ #define CL_HYPHEN 0x1000 /* convert to - */ #define CL_STOP 0x2000 /* discard rest of name */ -#define CL_SEP | 0x4000 + /* address separator */ +/* + Notice the single '(' in the definition of CL_SEP, + therefore an "extra" ')' is needed where it is used. +*/ +#define CL_SEP | ( 0x4000 + /* address separator */ -#define IS_OK(c) (Class[c] & CL_OK) +#define IS_OK(c) (Class[c] & CL_OK) #define IS_SPACE(c) (Class[c] & CL_SPACE) #define IGNORE(c) (c & 0x80 || Class[c] & CL_IGNORE) -#define BEGIN_RANGE(c) (Class[c] & CL_RANGE(0)) +#define BEGIN_RANGE(c) ((Class[c]) & (CL_RANGE(0))) #define END_RANGE(c) (Class[c] & 0xff) #define IS_HYPHEN(c) (Class[c] & CL_HYPHEN) #define IS_STOP(c) (Class[c] & CL_STOP) -#define IS_SEPARATOR(c) (Class[c] & (0 CL_SEP 0)) +/* CL_SEP contains '(' */ +#define IS_SEPARATOR(c) ((Class[c]) & (0 CL_SEP 0))) int old_packname = 0; /* Default to new behavior */ @@ -75,11 +80,11 @@ static short Class[128] = { /* US */ CL_IGNORE, /* space */ CL_SPACE, - /* ! */ CL_SPACE CL_SEP SEP_BANG, + /* ! */ (CL_SPACE) CL_SEP (SEP_BANG)), /* " */ CL_RANGE('"'), /* # */ CL_OK, /* $ */ CL_OK, - /* % */ CL_OK CL_SEP SEP_PERCENT, + /* % */ (CL_OK) CL_SEP (SEP_PERCENT)), /* & */ CL_OK, /* ' */ CL_OK, /* ( */ CL_OK, @@ -88,7 +93,7 @@ static short Class[128] = { /* + */ CL_HYPHEN, /* , */ CL_STOP, /* - */ CL_HYPHEN, - /* . */ CL_SPACE CL_SEP SEP_DOT, + /* . */ (CL_SPACE) CL_SEP (SEP_DOT)), /* / */ CL_OK, /* 0 */ CL_OK, /* 1 */ CL_OK, @@ -106,7 +111,7 @@ static short Class[128] = { /* = */ CL_HYPHEN, /* > */ CL_IGNORE, /* ? */ CL_IGNORE, - /* @ */ CL_OK CL_SEP SEP_AMPERSAND, + /* @ */ (CL_OK) CL_SEP (SEP_AMPERSAND)), /* A */ CL_OK, /* B */ CL_OK, /* C */ CL_OK, @@ -137,7 +142,7 @@ static short Class[128] = { /* \ */ CL_OK, /* ] */ CL_OK, /* ^ */ CL_IGNORE, - /* _ */ CL_SPACE CL_SEP SEP_SCORE, + /* _ */ (CL_SPACE) CL_SEP (SEP_SCORE)), /* ` */ CL_IGNORE, /* a */ CL_OK, /* b */ CL_OK, @@ -190,6 +195,7 @@ pack_name(char *dest, char *source, int length) int lfirst, lmiddle, llast; char namebuf[129]; char *separator[SEP_MAXIMUM]; + int escaped = 0; dest[0] = NUL; @@ -214,6 +220,16 @@ new_partition: for (i = SEP_MAXIMUM; --i >= 0; separator[i] = NULL); while ((c = *p++)) { + if (c == '\\' && ! escaped) { + escaped = 1; + continue; + } + if (escaped) { + escaped = 0; + *q++ = c; + continue; + } + if (c == '<') { while (q > namebuf && q[-1] == SP) q--; -- 2.30.1 -- System Information: Debian Release: bullseye/sid APT prefers testing APT policy: (500, 'testing'), (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 5.10.9-1 (SMP w/2 CPU threads) Locale: LANG=is_IS.iso88591, LC_CTYPE=is_IS.iso88591 (charmap=ISO-8859-1), LANGUAGE not set Shell: /bin/sh linked to /bin/dash Init: sysvinit (via /sbin/init) -- debconf information excluded -- Bjarni I. Gislason