X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/5dd6771b28c257af405d7248639ed0e3bcdce38b..9322ba2854211794c27fae9468768b80b767c211:/sbr/seq_bits.c?ds=sidebyside diff --git a/sbr/seq_bits.c b/sbr/seq_bits.c index 30dd3f53..f27efa9f 100644 --- a/sbr/seq_bits.c +++ b/sbr/seq_bits.c @@ -13,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;