Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
chrchr-github committed Sep 21, 2023
2 parents 09c5a83 + 6fcf11b commit 7f4ba53
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 18 deletions.
2 changes: 1 addition & 1 deletion lib/tokenize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8195,7 +8195,7 @@ void Tokenizer::reportUnknownMacros() const
if (Token::Match(inner, "[[({]"))
inner = inner->link();
else if (inner->str() == ";")
unknownMacroError(inner);
unknownMacroError(tok);
}
}

Expand Down
4 changes: 4 additions & 0 deletions test/testtokenize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7039,6 +7039,10 @@ class TestTokenizer : public TestFixture {
"typedef int UStringCaseMapper(icu::BreakIterator* iter);\n"),
InternalError,
"There is an unknown macro here somewhere. Configuration is required. If U_ICU_ENTRY_POINT_RENAME is a macro then please configure it.");

ASSERT_THROW_EQUALS(tokenizeAndStringify("void f() { MACRO(x(), y(), \"abc\", z(); ok = true); }\n"), // #12006
InternalError,
"There is an unknown macro here somewhere. Configuration is required. If MACRO is a macro then please configure it.");
}


Expand Down
49 changes: 32 additions & 17 deletions tools/donate-cpu-server.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
# Version scheme (MAJOR.MINOR.PATCH) should orientate on "Semantic Versioning" https://semver.org/
# Every change in this script should result in increasing the version number accordingly (exceptions may be cosmetic
# changes)
SERVER_VERSION = "1.3.43"
SERVER_VERSION = "1.3.44"

OLD_VERSION = '2.12.0'

Expand Down Expand Up @@ -985,11 +985,12 @@ def check_library_report(result_path: str, message_id: str) -> str:


# Lists all checkLibrary* messages regarding the given function name
def check_library_function_name(result_path: str, function_name: str, nonfunc_id: str='') -> str:
def check_library_function_name(result_path: str, function_name: str, query_params: dict, nonfunc_id: str='') -> str:
pkgs = '' if query_params.get('pkgs') == '1' else None
function_name = urllib.parse.unquote_plus(function_name)
if nonfunc_id:
id = '[' + nonfunc_id
else:
function_name = urllib.parse.unquote_plus(function_name)
if function_name.endswith('()'):
id = '[checkLibrary'
else:
Expand All @@ -999,11 +1000,18 @@ def check_library_function_name(result_path: str, function_name: str, nonfunc_id
if not os.path.isfile(filename) or filename.endswith('.diff'):
continue
info_messages = False
url = None
package_url = None
cppcheck_options = None
for line in open(filename, 'rt'):
if line.startswith('cppcheck: '):
if OLD_VERSION not in line:
# Package results seem to be too old, skip
break
else:
# Current package, parse on
continue
if line.startswith('ftp://'):
url = line
package_url = line
continue
if line.startswith('cppcheck-options:'):
cppcheck_options = line
Expand All @@ -1014,16 +1022,23 @@ def check_library_function_name(result_path: str, function_name: str, nonfunc_id
continue
if not info_messages:
continue
if id in line:
if (' ' + function_name + ' ') in line:
if url:
output_lines_list.append(url)
url = None
if cppcheck_options:
output_lines_list.append(cppcheck_options)
cppcheck_options = None
output_lines_list.append(line)
if id not in line:
continue
if not (' ' + function_name + ' ') in line:
continue
if pkgs is not None and package_url is not None:
pkgs += '{}\n'.format(package_url.strip())
break
if package_url:
output_lines_list.append(package_url)
package_url = None
if cppcheck_options:
output_lines_list.append(cppcheck_options)
cppcheck_options = None
output_lines_list.append(line)

if pkgs is not None:
return pkgs
return ''.join(output_lines_list)


Expand Down Expand Up @@ -1144,7 +1159,7 @@ def run(self):
httpGetResponse(self.connection, text, 'text/html')
elif url.startswith('/check_library-'):
function_name = url[len('/check_library-'):]
text = check_library_function_name(self.infoPath, function_name)
text = check_library_function_name(self.infoPath, function_name, queryParams)
httpGetResponse(self.connection, text, 'text/plain')
elif url == '/value_flow_bailout_incomplete_var.html':
text = check_library_report(self.resultPath, message_id='valueFlowBailoutIncompleteVar')
Expand All @@ -1154,11 +1169,11 @@ def run(self):
httpGetResponse(self.connection, text, 'text/html')
elif url.startswith('/incomplete_var-'):
var_name = url[len('/incomplete_var-'):]
text = check_library_function_name(self.resultPath, var_name, nonfunc_id='valueFlowBailoutIncompleteVar')
text = check_library_function_name(self.resultPath, var_name, queryParams, nonfunc_id='valueFlowBailoutIncompleteVar')
httpGetResponse(self.connection, text, 'text/plain')
elif url.startswith('/unknown_macro-'):
var_name = url[len('/unknown_macro-'):]
text = check_library_function_name(self.resultPath, var_name, nonfunc_id='unknownMacro')
text = check_library_function_name(self.resultPath, var_name, queryParams, nonfunc_id='unknownMacro')
httpGetResponse(self.connection, text, 'text/plain')
else:
filename = resultPath + url
Expand Down

0 comments on commit 7f4ba53

Please sign in to comment.