Browse Source

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
tags/REL_5_2_4
Dominik Stadler 8 months ago
parent
commit
cdb2ba1398

+ 8
- 11
poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java 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();
}


BIN
test-data/slideshow/clusterfuzz-testcase-minimized-POIFuzzer-5205835528404992.pptx View File


BIN
test-data/spreadsheet/stress.xls View File


Loading…
Cancel
Save