]> diplodocus.org Git - nmh/commitdiff
Replaced !iscntrl() with isprint().
authorDavid Levine <levinedl@acm.org>
Thu, 8 Dec 2016 21:27:40 +0000 (16:27 -0500)
committerDavid Levine <levinedl@acm.org>
Thu, 8 Dec 2016 21:31:13 +0000 (16:31 -0500)
To address Ralph's FIXME comment.  One example where a byte would
have been printed with !iscntrl() is 0x24 is ISO 646 BASIC (Inv),
which is undefined.  Also, added test cases to cover most of
get_param_value().  Also, replaced a couple of other FIXME's with
code comments.

sbr/error.c
test/mhshow/test-charset
tools/showbuildenv
uip/mhparse.c

index e4bc9e3..1796736 100644 (file)
@@ -29,9 +29,7 @@ advise (const char *what, const char *fmt, ...)
 /* adios calls advertise() with no tail to print fmt, and perhaps what,
  * to stderr, and "ends" the program with an error exit status.  The
  * route to exit is via the done function pointer and may not be
 /* adios calls advertise() with no tail to print fmt, and perhaps what,
  * to stderr, and "ends" the program with an error exit status.  The
  * route to exit is via the done function pointer and may not be
- * straightforward.
- * FIXME: Document if this function can ever return.  If not, perhaps an
- * abort(3) at the end of the routine would make that more clear. */
+ * straightforward. */
 void
 adios (const char *what, const char *fmt, ...)
 {
 void
 adios (const char *what, const char *fmt, ...)
 {
@@ -40,6 +38,8 @@ adios (const char *what, const char *fmt, ...)
     va_start(ap, fmt);
     advertise (what, NULL, fmt, ap);
     va_end(ap);
     va_start(ap, fmt);
     advertise (what, NULL, fmt, ap);
     va_end(ap);
+    /* done(), by default, calls exit(). So this function, with that
+       default, will never return. */
     done (1);
 }
 
     done (1);
 }
 
index 5ca56f2..3bcfdff 100755 (executable)
@@ -71,5 +71,61 @@ run_prog mhshow $msgnum > $actual 2>&1
 check "$expected" "$actual" : locale profile component
 
 
 check "$expected" "$actual" : locale profile component
 
 
+start_test 'Encoded parameter value'
+msgfile=`mhpath new`
+msgnum=`basename $msgfile`
+cat > $msgfile <<EOF
+From: foo@example.edu
+To: bar@example.edu
+Subject: test
+MIME-Version: 1.0
+Content-Type: text/plain; charset*=EBCDIC-US''%e4%e3%c6%60%f8
+Content-Transfer-Encoding: quoted-printable
+Content-Description: bogus quoted-printable data
+Date: Sun, 18 Dec 2005 00:52:39 +0100
+
+4 =C3=B7 2 =3D 2
+EOF
+
+cat > $expected <<EOF
+[ Message inbox:12 ]
+Date:    Sun, 18 Dec 2005 00:52:39 +0100
+To:      bar@example.edu
+From:    foo@example.edu
+Subject: test
+
+MIME-Version: 1.0
+Content-Description: bogus quoted-printable data
+
+[ part  - text/plain - bogus quoted-printable data  ${text_size}B  ]
+4 รท 2 = 2
+EOF
+
+run_prog mhshow $msgnum > $actual 2>&1
+check "$expected" "$actual" : encoded parameter value
+
+
+start_test 'replacement character in parameter value'
+#### The output of this test doesn't show it, but it covers the
+#### noiconv: portion of get_param_value().
+cat > $msgfile <<'EOF'
+Subject: invalid parameter value charset
+MIME-Version: 1.0
+Content-Type: text/plain; charset*=invalid''%0Dus-ascii
+EOF
+
+cat > $expected <<EOF
+[ Message inbox:12 ]
+Subject: invalid parameter value charset
+
+MIME-Version: 1.0
+
+[ part  - text/plain -   0B  ]
+EOF
+
+run_prog mhshow $msgnum > $actual 2>&1
+check "$expected" "$actual"
+
+
 finish_test
 exit $failed
 finish_test
 exit $failed
index 5eec6ee..2338bc6 100755 (executable)
@@ -5,13 +5,10 @@
 # build environment on machines they can't login on.  It also provides
 # a history in the build logs that might be useful in catching
 # regressions.
 # build environment on machines they can't login on.  It also provides
 # a history in the build logs that might be useful in catching
 # regressions.
-# 
+#
 # This script should *only* report basic information about the build
 # environment, and only that necessary to reproduce the build
 # environment.
 # This script should *only* report basic information about the build
 # environment, and only that necessary to reproduce the build
 # environment.
-#
-# FIXME: Document meaning of script's exit status, if any.
-# It jumps through hoops with `|| true' despite not using `set -e'.
 
 offset () {
     sed -e '/./s/^/    /' "$@"
 
 offset () {
     sed -e '/./s/^/    /' "$@"
@@ -63,6 +60,7 @@ case ${os} in
        cc -v 2>&1 | offset
 
        header Installed packages:
        cc -v 2>&1 | offset
 
        header Installed packages:
+        #### pkg(7) or pkg_info(1) might not always be available.
        (pkg info 2>/dev/null | offset) || true
        (pkg_info 2>/dev/null | offset) || true
        ;;
        (pkg info 2>/dev/null | offset) || true
        (pkg_info 2>/dev/null | offset) || true
        ;;
index 42566aa..5b1758d 100644 (file)
@@ -4228,17 +4228,13 @@ noiconv:
 #endif /* HAVE_ICONV */
 
     /*
 #endif /* HAVE_ICONV */
 
     /*
-     * Take everything non-ASCII and substituite the replacement character
+     * Take everything non-ASCII and substitute the replacement character
      */
 
     q = buffer;
     bufsize = sizeof(buffer);
     for (p = pm->pm_value; *p != '\0' && bufsize > 1; p++, q++, bufsize--) {
      */
 
     q = buffer;
     bufsize = sizeof(buffer);
     for (p = pm->pm_value; *p != '\0' && bufsize > 1; p++, q++, bufsize--) {
-        /* FIXME: !iscntrl should perhaps be isprint as that allows all
-         * classes bar cntrl, whereas the cntrl class can include those
-         * in space and blank.
-         * http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html */
-       if (isascii((unsigned char) *p) && !iscntrl((unsigned char) *p))
+       if (isascii((unsigned char) *p) && isprint((unsigned char) *p))
            *q = *p;
        else
            *q = replace;
            *q = *p;
        else
            *q = replace;