On Jan 23, 2012, at 5:07 PM, Tom Browder wrote:
> On Mon, Jan 23, 2012 at 16:03, Christopher Sean Morrison <[email protected]>
> wrote:
>> fails += test_vls("he%*so", 2, "ll");
>> fails += test_vls("he%*so", 2, "llll");
>> fails += test_vls("he%*so", 4, "ll");
>
> But they don't fail with my latest vls version.
Understood, I figured they might. The issue is going to be any existing %*s
code that erroneously relied on that behavior. A quick scan through the
sources reveals just a few places %*s is used that will need to be reviewed:
$ grep -r "%\*s" src/*/* | grep -v svn |grep bu_
src/bwish/input.c: bu_log("%*s", bu_vls_strlen(&input_str), SPACES);
src/bwish/input.c: bu_log("%*s",
bu_vls_strlen(&input_str)-input_str_index, SPACES);
src/bwish/input.c: bu_log("\b%*s", 2,
bu_vls_addr(&input_str)+input_str_index-1);
src/bwish/input.c: bu_log("%*s", bu_vls_strlen(&input_str), SPACES);
src/bwish/input.c: bu_log("%V%V%*s", &input_str, &temp, len -
input_str_index, SPACES);
src/bwish/input.c: bu_log("%V%V%*s", &input_str, &temp, i -
input_str_index, SPACES);
src/libbu/rb_diag.c: bu_log("%*snode <%p>...\n", depth * 2, "", node);
src/libbu/rb_diag.c: bu_log("%*s tree: <%p>\n", depth * 2, "",
node->rbn_tree);
src/libbu/rb_diag.c: bu_log("%*s parent: <%p>\n", depth * 2, "",
rb_parent(node, d_order));
src/libbu/rb_diag.c: bu_log("%*s left: <%p>\n", depth * 2, "",
rb_left_child(node, d_order));
src/libbu/rb_diag.c: bu_log("%*s right: <%p>\n", depth * 2, "",
rb_right_child(node, d_order));
src/libbu/rb_diag.c: bu_log("%*s color: %s\n", depth * 2, "",
(rb_get_color(node, d_order) == RB_RED) ? "RED" : (rb_get_color(node, d_order)
== RB_BLK) ? "BLACK" : "Huh?");
src/libbu/rb_diag.c: bu_log("%*s package: <%p> ", depth * 2, "", package);
src/libged/gqa.c: bu_vls_printf(_ged_current_gedp->ged_result_str,
"\t%*s %g %s\n", -max_region_name_len, obj_tbl[obj].o_name,
src/libged/gqa.c: bu_vls_printf(_ged_current_gedp->ged_result_str,
"\t%*s %g %s\n", -max_region_name_len, obj_tbl[obj].o_name,
src/libged/nirt.c: bu_vls_printf(&o_vls, " fmt r \"\\n%*s\" ",
count, val);
src/libged/wdb_nirt.c: bu_vls_printf(&o_vls, " fmt r \"\\n%*s\" ",
count, val);
src/mged/cmd.c: bu_log("%*s%s", len, result, result[len-1] == '\n'
? "" : "\n");
src/mged/mged.c: bu_log("%*s", bu_vls_strlen(&input_str), SPACES);
src/mged/mged.c: bu_log("%*s", bu_vls_strlen(&input_str), SPACES);
src/mged/mged.c: bu_log("%*s",
bu_vls_strlen(&input_str)-input_str_index, SPACES);
src/mged/mged.c: bu_log("\b%*s", 2,
bu_vls_addr(&input_str)+input_str_index-1);
src/mged/mged.c: bu_log("%*s", bu_vls_strlen(&input_str), SPACES);
src/mged/mged.c: bu_log("%*s", len - input_str_index, SPACES);
src/mged/mged.c: bu_log("%*s", i - input_str_index, SPACES);
src/nirt/command.c: (void) bu_log("%*s %s\n", -14, ctp->com_name,
ctp->com_desc);
bu_log() goes through bu_vls_vprintf() so those are affected too. The logging
outputs might be all benign but I'd bet some assume it's a max length ala
strncpy.
Cheers!
Sean
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
BRL-CAD Developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-devel