Skip to content

Commit

Permalink
blaze822_priv.h: use proper lc/uc
Browse files Browse the repository at this point in the history
Mail headers may contain characters where the simple definition breaks,
which results in wrong formatting on output.

Fixes leahneukirchen#235.
  • Loading branch information
leahneukirchen committed Mar 16, 2023
1 parent cccf01c commit 1838158
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 4 deletions.
6 changes: 3 additions & 3 deletions blaze822_priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ struct message {

#define isfws(c) (((unsigned char)(c) == ' ' || (unsigned char)(c) == '\t' || (unsigned char)(c) == '\n' || (unsigned char)(c) == '\r'))

// ASCII lowercase/uppercase without alpha check (wrong for "@[\]^_")
#define lc(c) ((c) | 0x20)
#define uc(c) ((c) & 0xdf)
// 7bit-ASCII only lowercase/uppercase
#define lc(c) (((unsigned)(c)-'A') < 26 ? ((c) | 0x20) : (c))
#define uc(c) (((unsigned)(c)-'a') < 26 ? ((c) & 0xdf) : (c))

// dirent type that can be a mail/dir (following symlinks)
#if defined(DT_REG) && defined(DT_LNK) && defined(DT_UNKNOWN)
Expand Down
3 changes: 2 additions & 1 deletion rfc2047.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,8 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc)
if (ic == (iconv_t)-1)
goto nocode;

char enc = lc(*e++);
char enc = lc(*e);
e++;
if (*e++ != '?')
goto nocode;
char *start = e;
Expand Down
26 changes: 26 additions & 0 deletions t/1100-mhdr.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/sh -e
cd ${0%/*}
. ./lib.sh

plan 9

cat <<EOF >tmp
Header: foo
Header2: bar
Header-Three: quux
Header_Four: ding
Body
EOF

check_same 'Header' 'mhdr -h Header ./tmp' 'echo foo'
check_same 'Header2' 'mhdr -h Header2 ./tmp' 'echo bar'
check_same 'Header-Three' 'mhdr -h Header-Three ./tmp' 'echo quux'
check_same 'Header_Four' 'mhdr -h Header_Four ./tmp' 'echo ding'

check_same 'header' 'mhdr -h header ./tmp' 'echo foo'
check_same 'header2' 'mhdr -h header2 ./tmp' 'echo bar'
check_same 'header-Three' 'mhdr -h header-Three ./tmp' 'echo quux'
check_same 'header_Four' 'mhdr -h header_Four ./tmp' 'echo ding'

check 'issue 235' 'mhdr ./tmp |grep -i header_four'

0 comments on commit 1838158

Please sign in to comment.