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

Reply via email to