Bug 66425: Avoid a NullPointerException found via oss-fuzz

We try to avoid throwing NullPointerException, but it was possible
to trigger one here with a specially crafted input-file

Should fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=61441

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1911890 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2023-08-24 08:48:45 +00:00
parent e4ba9822cc
commit cdb2ba1398
3 changed files with 8 additions and 11 deletions

View File

@ -44,15 +44,10 @@ public final class PackageRelationshipCollection implements Iterable<PackageRela
*/
private final TreeMap<String, PackageRelationship> relationshipsByID = new TreeMap<>();
/**
* Package relationships ordered by type.
*/
private final TreeMap<String, PackageRelationship> relationshipsByType = new TreeMap<>();
/**
* A lookup of internal relationships to avoid
*/
private HashMap<String, PackageRelationship> internalRelationshipsByTargetName = new HashMap<>();
private final HashMap<String, PackageRelationship> internalRelationshipsByTargetName = new HashMap<>();
/**
@ -195,7 +190,6 @@ public final class PackageRelationshipCollection implements Iterable<PackageRela
(relPart == null ? "<null>" : relPart.getId()) + " for relationship: " + relPart);
}
relationshipsByID.put(relPart.getId(), relPart);
relationshipsByType.put(relPart.getRelationshipType(), relPart);
}
/**
@ -214,8 +208,8 @@ public final class PackageRelationshipCollection implements Iterable<PackageRela
*/
public PackageRelationship addRelationship(URI targetUri,
TargetMode targetMode, String relationshipType, String id) {
if (id == null || id.length() == 0) {
// Generate a unique ID is id parameter is null.
if (id == null || id.isEmpty()) {
// Generate a unique ID if id parameter is null.
if (nextRelationshipId == -1) {
nextRelationshipId = size() + 1;
}
@ -245,7 +239,6 @@ public final class PackageRelationshipCollection implements Iterable<PackageRela
PackageRelationship rel = relationshipsByID.get(id);
if (rel != null) {
relationshipsByID.remove(rel.getId());
relationshipsByType.values().remove(rel);
internalRelationshipsByTargetName.values().remove(rel);
}
}
@ -277,6 +270,11 @@ public final class PackageRelationshipCollection implements Iterable<PackageRela
* @return The package relationship identified by the specified id.
*/
public PackageRelationship getRelationshipByID(String id) {
if (id == null) {
throw new IllegalArgumentException("Cannot read relationship, provided ID is empty: " + id +
", having relationships: " + relationshipsByID.keySet());
}
return relationshipsByID.get(id);
}
@ -418,7 +416,6 @@ public final class PackageRelationshipCollection implements Iterable<PackageRela
*/
public void clear() {
relationshipsByID.clear();
relationshipsByType.clear();
internalRelationshipsByTargetName.clear();
}

Binary file not shown.