# # # patch "ChangeLog" # from [1c356f49ef54f091193dfe254cbe1cc19152ce15] # to [33ca0c0f24f73988cc4ebb3683b906f6906c0701] # # patch "cmd_automate.cc" # from [58d6134ff8b4cdff610edb02165d3e3f480322ae] # to [b30aa17a315bd443c8a1b9078d5435f949ccae3b] # # patch "tests/automate_stdio/__driver__.lua" # from [56f4bbe463ab7f5f88ee45e3b7add9531fc6d732] # to [d3d28f9b0c0c443874d7fce17861bc231bb8c4b1] # ============================================================ --- ChangeLog 1c356f49ef54f091193dfe254cbe1cc19152ce15 +++ ChangeLog 33ca0c0f24f73988cc4ebb3683b906f6906c0701 @@ -1,5 +1,12 @@ 2006-10-24 Nathaniel Smith + * cmd_automate.cc (automate stdio): Do not run randomly through + memory doing random things when we get a 0-length stdio command + list. + * tests/automate_stdio/__driver__.lua: Add some bad-input tests. + +2006-10-24 Nathaniel Smith + * cmd_automate.cc (automate_reader): Use delete[] to free array allocated with new[]. ============================================================ --- cmd_automate.cc 58d6134ff8b4cdff610edb02165d3e3f480322ae +++ cmd_automate.cc b30aa17a315bd443c8a1b9078d5435f949ccae3b @@ -313,8 +313,8 @@ AUTOMATE(stdio, "") utf8 cmd; vector args; vector::iterator i = cmdline.begin(); - if (i != cmdline.end()) - cmd = utf8(*i); + E(i != cmdline.end(), F("Bad input to automate stdio")); + cmd = utf8(*i); for (++i; i != cmdline.end(); ++i) { args.push_back(utf8(*i)); ============================================================ --- tests/automate_stdio/__driver__.lua 56f4bbe463ab7f5f88ee45e3b7add9531fc6d732 +++ tests/automate_stdio/__driver__.lua d3d28f9b0c0c443874d7fce17861bc231bb8c4b1 @@ -1,5 +1,10 @@ +mtn_setup() -mtn_setup() +-- a number of broken input strings +check(mtn("automate", "stdio"), 1, false, false, "le") +check(mtn("automate", "stdio"), 1, false, false, "l") +check(mtn("automate", "stdio"), 1, false, false, "l5:a") +check(mtn("automate", "stdio"), 1, false, false, "l5:aaaaaaaa") function parse_stdio(dat, which) local got = {}