OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <limits.h> | 5 #include <limits.h> |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 #include <iostream> | 7 #include <iostream> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 if (temp > 0) | 101 if (temp > 0) |
102 end_index = static_cast<size_t>(temp); | 102 end_index = static_cast<size_t>(temp); |
103 } | 103 } |
104 | 104 |
105 bool has_regexp = cmd->HasSwitch(kRegexpSwitch); | 105 bool has_regexp = cmd->HasSwitch(kRegexpSwitch); |
106 RE2 filter_pattern(cmd->GetSwitchValueASCII(kRegexpSwitch)); | 106 RE2 filter_pattern(cmd->GetSwitchValueASCII(kRegexpSwitch)); |
107 | 107 |
108 bool invert = cmd->HasSwitch(kInvertSwitch); | 108 bool invert = cmd->HasSwitch(kInvertSwitch); |
109 bool perform_dump = cmd->HasSwitch(kDumpSwitch); | 109 bool perform_dump = cmd->HasSwitch(kDumpSwitch); |
110 | 110 |
111 std::vector<base::FilePath::StringType> input_file_names; | |
112 base::FilePath::StringType output_file_name; | 111 base::FilePath::StringType output_file_name; |
113 base::SplitString(args[0], ',', &input_file_names); | |
114 | 112 |
115 if (!perform_dump) { | 113 if (!perform_dump) { |
116 if (args.size() < 2) { | 114 if (args.size() < 2) { |
117 usage(); | 115 usage(); |
118 return EXIT_FAILURE; | 116 return EXIT_FAILURE; |
119 } | 117 } |
120 output_file_name = args[1]; | 118 output_file_name = args[1]; |
121 } | 119 } |
122 | 120 |
123 ipc_fuzzer::MessageVector input_message_vector; | 121 ipc_fuzzer::MessageVector input_message_vector; |
124 for (std::vector<base::FilePath::StringType>::iterator | 122 for (const base::FilePath::StringType& name : base::SplitString( |
125 it = input_file_names.begin(); it != input_file_names.end(); ++it) { | 123 args[0], base::FilePath::StringType(1, ','), |
| 124 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { |
126 ipc_fuzzer::MessageVector message_vector; | 125 ipc_fuzzer::MessageVector message_vector; |
127 if (!ipc_fuzzer::MessageFile::Read(base::FilePath(*it), &message_vector)) | 126 if (!ipc_fuzzer::MessageFile::Read(base::FilePath(name), &message_vector)) |
128 return EXIT_FAILURE; | 127 return EXIT_FAILURE; |
129 input_message_vector.insert(input_message_vector.end(), | 128 input_message_vector.insert(input_message_vector.end(), |
130 message_vector.begin(), message_vector.end()); | 129 message_vector.begin(), message_vector.end()); |
131 message_vector.weak_clear(); | 130 message_vector.weak_clear(); |
132 } | 131 } |
133 | 132 |
134 bool has_indices = cmd->HasSwitch(kInSwitch); | 133 bool has_indices = cmd->HasSwitch(kInSwitch); |
135 std::vector<bool> indices; | 134 std::vector<bool> indices; |
136 | 135 |
137 if (has_indices) { | 136 if (has_indices) { |
138 indices.resize(input_message_vector.size(), false); | 137 indices.resize(input_message_vector.size(), false); |
139 std::vector<std::string> index_strings; | 138 for (const std::string& cur : base::SplitString( |
140 base::SplitString(cmd->GetSwitchValueASCII(kInSwitch), ',', &index_strings); | 139 cmd->GetSwitchValueASCII(kInSwitch), ",", base::TRIM_WHITESPACE, |
141 for (std::vector<std::string>::iterator it = index_strings.begin(); | 140 base::SPLIT_WANT_ALL)) { |
142 it != index_strings.end(); ++it) { | 141 int index = atoi(cur.c_str()); |
143 int index = atoi(it->c_str()); | |
144 if (index >= 0 && static_cast<size_t>(index) < indices.size()) | 142 if (index >= 0 && static_cast<size_t>(index) < indices.size()) |
145 indices[index] = true; | 143 indices[index] = true; |
146 } | 144 } |
147 } | 145 } |
148 | 146 |
149 ipc_fuzzer::MessageVector output_message_vector; | 147 ipc_fuzzer::MessageVector output_message_vector; |
150 std::vector<size_t> remap_vector; | 148 std::vector<size_t> remap_vector; |
151 | 149 |
152 for (size_t i = 0; i < input_message_vector.size(); ++i) { | 150 for (size_t i = 0; i < input_message_vector.size(); ++i) { |
153 bool valid = (i >= start_index && i < end_index); | 151 bool valid = (i >= start_index && i < end_index); |
(...skipping 17 matching lines...) Expand all Loading... |
171 } | 169 } |
172 } else { | 170 } else { |
173 if (!ipc_fuzzer::MessageFile::Write( | 171 if (!ipc_fuzzer::MessageFile::Write( |
174 base::FilePath(output_file_name), output_message_vector)) { | 172 base::FilePath(output_file_name), output_message_vector)) { |
175 return EXIT_FAILURE; | 173 return EXIT_FAILURE; |
176 } | 174 } |
177 } | 175 } |
178 | 176 |
179 return EXIT_SUCCESS; | 177 return EXIT_SUCCESS; |
180 } | 178 } |
OLD | NEW |