Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit acaaaab

Browse files
committedMar 28, 2018
Allow incorrect paths for jar files in the classpath without crashing
1 parent ce89a41 commit acaaaab

File tree

3 files changed

+19
-13
lines changed

3 files changed

+19
-13
lines changed
 

‎regression/cbmc-java/invalid_classpath/test-jar.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
KNOWNBUG
1+
CORE
22
Test.class
33
--classpath ./NotHere.jar
44
^EXIT=6$

‎src/java_bytecode/java_class_loader.cpp

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,9 @@ java_class_loadert::parse_tree_with_overlayst &java_class_loadert::operator()(
8181
optionalt<java_bytecode_parse_treet> java_class_loadert::get_class_from_jar(
8282
const irep_idt &class_name,
8383
const std::string &jar_file,
84+
const jar_indext &jar_index,
8485
java_class_loader_limitt &class_loader_limit)
8586
{
86-
jar_indext &jar_index = jars_by_path.at(jar_file);
8787
auto jar_index_it = jar_index.find(class_name);
8888
if(jar_index_it == jar_index.end())
8989
return {};
@@ -112,9 +112,11 @@ java_class_loadert::get_parse_tree(
112112
// First add all given JAR files
113113
for(const auto &jar_file : jar_files)
114114
{
115-
read_jar_file(class_loader_limit, jar_file);
115+
jar_index_optcreft index = read_jar_file(class_loader_limit, jar_file);
116+
if(!index)
117+
continue;
116118
optionalt<java_bytecode_parse_treet> parse_tree =
117-
get_class_from_jar(class_name, jar_file, class_loader_limit);
119+
get_class_from_jar(class_name, jar_file, *index, class_loader_limit);
118120
if(parse_tree)
119121
parse_trees.push_back(*parse_tree);
120122
}
@@ -130,23 +132,26 @@ java_class_loadert::get_parse_tree(
130132

131133
// This does not read from the jar file but from the jar_filet object we
132134
// just created
133-
read_jar_file(class_loader_limit, core_models);
134-
135-
optionalt<java_bytecode_parse_treet> parse_tree =
136-
get_class_from_jar(class_name, core_models, class_loader_limit);
137-
if(parse_tree)
138-
parse_trees.push_back(*parse_tree);
135+
jar_index_optcreft index = read_jar_file(class_loader_limit, core_models);
136+
if(index)
137+
{
138+
optionalt<java_bytecode_parse_treet> parse_tree =
139+
get_class_from_jar(class_name, core_models, *index, class_loader_limit);
140+
if(parse_tree)
141+
parse_trees.push_back(*parse_tree);
142+
}
139143
}
140144

141145
// Then add everything on the class path
142146
for(const auto &cp_entry : config.java.classpath)
143147
{
144148
if(has_suffix(cp_entry, ".jar"))
145149
{
146-
read_jar_file(class_loader_limit, cp_entry);
147-
150+
jar_index_optcreft index = read_jar_file(class_loader_limit, cp_entry);
151+
if(!index)
152+
continue;
148153
optionalt<java_bytecode_parse_treet> parse_tree =
149-
get_class_from_jar(class_name, cp_entry, class_loader_limit);
154+
get_class_from_jar(class_name, cp_entry, *index, class_loader_limit);
150155
if(parse_tree)
151156
parse_trees.push_back(*parse_tree);
152157
}

‎src/java_bytecode/java_class_loader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ class java_class_loadert:public messaget
160160
optionalt<java_bytecode_parse_treet> get_class_from_jar(
161161
const irep_idt &class_name,
162162
const std::string &jar_file,
163+
const jar_indext &jar_index,
163164
java_class_loader_limitt &class_loader_limit);
164165
};
165166

0 commit comments

Comments
 (0)
Please sign in to comment.