init: fix error messages when an invalid section header is found
If a section header such as 'on' or 'service' has an error with it, the rest of the commands / options are currently reported as errors since there is no valid parser object to parse them. For example, service !@#$%%^&*() /system/bin/false user root group blah blah blah Generates: init: /system/etc/init/bad.rc: 2: invalid service name '!@#$%%^&*()' init: /system/etc/init/bad.rc: 3: Invalid section keyword found init: /system/etc/init/bad.rc: 4: Invalid section keyword found init: /system/etc/init/bad.rc: 5: Invalid section keyword found This change suppresses the extraneous 'Invalid section keyword found' messages. Test: faulty error messages are suppressed. Change-Id: Ieeb2d5b8b7eea33e191a88ce5a0d41701686943f
This commit is contained in:
parent
52db49b68f
commit
0166fd606d
1 changed files with 7 additions and 1 deletions
|
@ -53,7 +53,12 @@ void Parser::ParseData(const std::string& filename, std::string* data) {
|
|||
int section_start_line = -1;
|
||||
std::vector<std::string> args;
|
||||
|
||||
// If we encounter a bad section start, there is no valid parser object to parse the subsequent
|
||||
// sections, so we must suppress errors until the next valid section is found.
|
||||
bool bad_section_found = false;
|
||||
|
||||
auto end_section = [&] {
|
||||
bad_section_found = false;
|
||||
if (section_parser == nullptr) return;
|
||||
|
||||
if (auto result = section_parser->EndSection(); !result) {
|
||||
|
@ -101,6 +106,7 @@ void Parser::ParseData(const std::string& filename, std::string* data) {
|
|||
parse_error_count_++;
|
||||
LOG(ERROR) << filename << ": " << state.line << ": " << result.error();
|
||||
section_parser = nullptr;
|
||||
bad_section_found = true;
|
||||
}
|
||||
} else if (section_parser) {
|
||||
if (auto result = section_parser->ParseLineSection(std::move(args), state.line);
|
||||
|
@ -108,7 +114,7 @@ void Parser::ParseData(const std::string& filename, std::string* data) {
|
|||
parse_error_count_++;
|
||||
LOG(ERROR) << filename << ": " << state.line << ": " << result.error();
|
||||
}
|
||||
} else {
|
||||
} else if (!bad_section_found) {
|
||||
parse_error_count_++;
|
||||
LOG(ERROR) << filename << ": " << state.line
|
||||
<< ": Invalid section keyword found";
|
||||
|
|
Loading…
Reference in a new issue