X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/6c42153ad9362cc676ea66563bf400d7511b3b68..a1349849b7d37f6ffd264005c1f945d64bb35858:/sbr/seq_bits.c?ds=sidebyside diff --git a/sbr/seq_bits.c b/sbr/seq_bits.c index 56bd2ec1..f27efa9f 100644 --- a/sbr/seq_bits.c +++ b/sbr/seq_bits.c @@ -2,8 +2,6 @@ /* * seq_bits.c -- return the snprintb() string for a sequence * - * $Id$ - * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. @@ -15,16 +13,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;