X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/5dd6771b28c257af405d7248639ed0e3bcdce38b..872ef4dde72a88ceb1358849a462f791135b842d:/sbr/seq_bits.c diff --git a/sbr/seq_bits.c b/sbr/seq_bits.c index 30dd3f53..a31b0995 100644 --- a/sbr/seq_bits.c +++ b/sbr/seq_bits.c @@ -1,6 +1,4 @@ - -/* - * seq_bits.c -- return the snprintb() string for a sequence +/* seq_bits.c -- return the snprintb() string for a sequence * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -13,16 +11,26 @@ char * seq_bits (struct msgs *mp) { - int i; + size_t i; size_t len; static char buffer[BUFSIZ]; strncpy (buffer, MBITS, sizeof(buffer)); - for (i = 0; mp->msgattrs[i]; i++) { + for (i = 0; i < svector_size (mp->msgattrs); i++) { len = strlen (buffer); snprintf (buffer + len, sizeof(buffer) - len, - "%c%s", FFATTRSLOT + 1 + i, mp->msgattrs[i]); + "%c%s", FFATTRSLOT + 1 + (int) i, + svector_at (mp->msgattrs, i)); + /* + * seq_bits() is used by seq_printdebug(), which passes an + * unsigned int bit vector to snprintb(). So limit the + * size of the return value accordingly. Even worse, + * snprintb() only uses characters up through ASCII space + * as the delimiter (the %c character above). So limit + * based on that. + */ + if ((int) i == ' ' - FFATTRSLOT - 1) break; } return buffer;