changeset 2:3fe22529f66c

Irccdctl: invalid alias arguments destructuration
author David Demelier <markand@malikania.fr>
date Tue, 09 Feb 2016 12:49:27 +0100
parents e80d7e8590a2
children 2822100d8b42
files irccdctl/irccdctl.cpp
diffstat 1 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/irccdctl/irccdctl.cpp	Tue Feb 09 12:08:32 2016 +0100
+++ b/irccdctl/irccdctl.cpp	Tue Feb 09 12:49:27 2016 +0100
@@ -17,6 +17,7 @@
  */
 
 #include <algorithm>
+#include <cassert>
 #include <iterator>
 #include <memory>
 #include <string>
@@ -349,7 +350,7 @@
 	for (const AliasCommand &cmd : alias) {
 		std::vector<std::string> args(argsCopy);
 		std::vector<std::string> cmdArgs;
-		std::vector<std::string>::difference_type toremove = 0;
+		std::vector<std::string>::size_type toremove = 0;
 
 		/* 1. Append command name before */
 		cmdArgs.push_back(cmd.command());
@@ -362,12 +363,14 @@
 				cmdArgs.push_back(args[arg.index()]);
 
 				if (arg.index() + 1 > toremove)
-					toremove += 1;
+					toremove = arg.index() + 1;
 			} else {
 				cmdArgs.push_back(arg.value());
 			}
 		}
 
+		assert(toremove <= args.size());
+
 		/* 2. Remove the arguments that been placed in placeholders */
 		args.erase(args.begin(), args.begin() + toremove);