|
|
*/ | */ |
if (sm_strcasecmp(type, "multipart") == 0 && | if (sm_strcasecmp(type, "multipart") == 0 && |
(!bitset(M87F_NO8BIT, flags) || bitset(M87F_NO8TO7, flags))) |
(!bitset(M87F_NO8BIT, flags) || bitset(M87F_NO8TO7, flags)) && |
|
!bitset(EF_TOODEEP, e->e_flags) |
|
) |
{ | { |
if (sm_strcasecmp(subtype, "digest") == 0) | if (sm_strcasecmp(subtype, "digest") == 0) |
|
|
} | } |
if (i >= MAXMIMENESTING) | if (i >= MAXMIMENESTING) |
{ | { |
usrerr("mime8to7: multipart nesting boundary too deep"); |
if (tTd(43, 4)) |
|
sm_dprintf("mime8to7: too deep, i=%d\n", i); |
|
if (!bitset(EF_TOODEEP, e->e_flags)) |
|
usrerr("mime8to7: multipart nesting boundary too deep"); |
/* avoid bounce loops */ | /* avoid bounce loops */ |
e->e_flags |= EF_DONT_MIME; |
e->e_flags |= EF_DONT_MIME|EF_TOODEEP; |
} | } |
else | else |
{ | { |
|
|
if (sm_strcasecmp(type, "message") == 0) | if (sm_strcasecmp(type, "message") == 0) |
{ | { |
if (!wordinclass(subtype, 's')) |
if (!wordinclass(subtype, 's') || |
|
bitset(EF_TOODEEP, e->e_flags)) |
{ | { |
flags |= M87F_NO8BIT; | flags |= M87F_NO8BIT; |
} | } |
|
|
#define EF_TOOBIG 0x02000000L /* message is too big */ | #define EF_TOOBIG 0x02000000L /* message is too big */ |
#define EF_SPLIT 0x04000000L /* envelope has been split */ | #define EF_SPLIT 0x04000000L /* envelope has been split */ |
#define EF_UNSAFE 0x08000000L /* unsafe: read from untrusted source */ | #define EF_UNSAFE 0x08000000L /* unsafe: read from untrusted source */ |
|
#define EF_TOODEEP 0x10000000L /* message is nested too deep */ |
#define DLVR_NOTIFY 0x01 | #define DLVR_NOTIFY 0x01 |
#define DLVR_RETURN 0x02 | #define DLVR_RETURN 0x02 |