* widths, so use the column width to bump the end pointer when
* appropriate.
*/
- if (char_len > 1 && epmax - *ep >= char_len - w) {
+ if (w >= 0 && char_len > 1 && epmax - *ep >= char_len - w) {
*ep += char_len - w;
}
- if (cp + w > *ep)
+ if (w >= 0 && cp + w > *ep)
break;
end -= char_len;
* by the number of "extra" bytes in this character. That's the
* character length (char_len) minus the column width (w).
*/
- if (char_len > 1 && max - *end >= char_len - w) {
+ if (w >= 0 && char_len > 1 && max - *end >= char_len - w) {
*end += char_len - w;
}
check "$expected" "$actual"
+cat >"$expected" <<EOF
+ 13 01/13 sender@example.co <<The Subject: is an encoded single quote, 0x92.
+EOF
+
+cat >"${MH_TEST_DIR}/Mail/inbox/13" <<EOF
+From: <sender@example.com>
+Subject: =?iso-8859-1?B?kgo=?=
+Date: Mon, 13 Jan 2014 14:18:33 -0600
+
+The Subject: is an encoded single quote, 0x92. cpstripped() didn't
+properly count it when decoding, which could be seen with:
+
+ scan -format '%(decode{subject})%{body}'
+
+The scan listing was two characters too long.
+EOF
+
+run_prog scan -width 80 last >"$actual"
+check "$expected" "$actual"
+
+
exit $failed