Skip to content

Commit bc8e9a2

Browse files
bactgoneall
authored andcommitted
Add checks to handle null
- Add checks to handle null before access - Add missing nullable annotation to overrided getAllItems methods Signed-off-by: Arthit Suriyawongkul <arthit@gmail.com>
1 parent 0906908 commit bc8e9a2

6 files changed

Lines changed: 39 additions & 22 deletions

File tree

src/main/java/org/spdx/library/conversion/Spdx2to3Converter.java

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131
import org.spdx.library.ListedLicenses;
3232
import org.spdx.library.model.v2.SpdxConstantsCompatV2;
3333
import org.spdx.library.model.v2.SpdxCreatorInformation;
34+
import org.spdx.library.model.v2.pointer.ByteOffsetPointer;
35+
import org.spdx.library.model.v2.pointer.LineCharPointer;
36+
import org.spdx.library.model.v2.pointer.StartEndPointer;
3437
import org.spdx.library.model.v3_0_1.ModelObjectV3;
3538
import org.spdx.library.model.v3_0_1.SpdxConstantsV3;
3639
import org.spdx.library.model.v3_0_1.SpdxModelClassFactoryV3;
@@ -1461,21 +1464,29 @@ public Snippet convertAndStore(org.spdx.library.model.v2.SpdxSnippet fromSnippet
14611464
Snippet toSnippet = (Snippet)SpdxModelClassFactoryV3.getModelObject(toModelStore,
14621465
toObjectUri, SpdxConstantsV3.SOFTWARE_SNIPPET, copyManager, true, defaultUriPrefix);
14631466
convertItemProperties(fromSnippet, toSnippet);
1464-
org.spdx.library.model.v2.pointer.StartEndPointer fromByteRange = fromSnippet.getByteRange();
1467+
StartEndPointer fromByteRange = fromSnippet.getByteRange();
14651468
if (Objects.nonNull(fromByteRange)) {
1466-
//noinspection DataFlowIssue
1467-
toSnippet.setByteRange(toSnippet.createPositiveIntegerRange(toModelStore.getNextId(IdType.Anonymous))
1468-
.setBeginIntegerRange(((org.spdx.library.model.v2.pointer.ByteOffsetPointer)fromByteRange.getStartPointer()).getOffset())
1469-
.setEndIntegerRange(((org.spdx.library.model.v2.pointer.ByteOffsetPointer)fromByteRange.getEndPointer()).getOffset())
1470-
.build());
1469+
// noinspection DataFlowIssue
1470+
ByteOffsetPointer startPointer = (ByteOffsetPointer) fromByteRange.getStartPointer();
1471+
ByteOffsetPointer endPointer = (ByteOffsetPointer) fromByteRange.getEndPointer();
1472+
if (Objects.nonNull(startPointer) && Objects.nonNull(endPointer)) {
1473+
toSnippet.setByteRange(toSnippet
1474+
.createPositiveIntegerRange(toModelStore.getNextId(IdType.Anonymous))
1475+
.setBeginIntegerRange(startPointer.getOffset())
1476+
.setEndIntegerRange(endPointer.getOffset()).build());
1477+
}
14711478
}
1472-
Optional<org.spdx.library.model.v2.pointer.StartEndPointer> fromLineRange = fromSnippet.getLineRange();
1479+
Optional<StartEndPointer> fromLineRange = fromSnippet.getLineRange();
14731480
if (fromLineRange.isPresent()) {
1474-
//noinspection DataFlowIssue
1475-
toSnippet.setLineRange(toSnippet.createPositiveIntegerRange(toModelStore.getNextId(IdType.Anonymous))
1476-
.setBeginIntegerRange(((org.spdx.library.model.v2.pointer.LineCharPointer)fromLineRange.get().getStartPointer()).getLineNumber())
1477-
.setEndIntegerRange(((org.spdx.library.model.v2.pointer.LineCharPointer)fromLineRange.get().getEndPointer()).getLineNumber())
1478-
.build());
1481+
// noinspection DataFlowIssue
1482+
LineCharPointer startPointer = (LineCharPointer) fromLineRange.get().getStartPointer();
1483+
LineCharPointer endPointer = (LineCharPointer) fromLineRange.get().getEndPointer();
1484+
if (Objects.nonNull(startPointer) && Objects.nonNull(endPointer)) {
1485+
toSnippet.setLineRange(toSnippet
1486+
.createPositiveIntegerRange(toModelStore.getNextId(IdType.Anonymous))
1487+
.setBeginIntegerRange(startPointer.getLineNumber())
1488+
.setEndIntegerRange(endPointer.getLineNumber()).build());
1489+
}
14791490
}
14801491
toSnippet.setSnippetFromFile(convertAndStore(Objects.requireNonNull(fromSnippet.getSnippetFromFile())));
14811492
return toSnippet;

src/main/java/org/spdx/storage/listedlicense/SpdxListedLicenseModelStore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ public void removeProperty(String objectUri, PropertyDescriptor propertyDescript
947947
}
948948

949949
@Override
950-
public Stream<TypedValue> getAllItems(String documentUri, @Nullable String typeFilter)
950+
public Stream<TypedValue> getAllItems(@Nullable String documentUri, @Nullable String typeFilter)
951951
throws InvalidSPDXAnalysisException {
952952
listedLicenseModificationLock.writeLock().lock();
953953
try {

src/main/java/org/spdx/storage/listedlicense/SpdxV2ListedLicenseModelStore.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.Optional;
2626
import java.util.Set;
2727
import java.util.stream.Stream;
28+
import javax.annotation.Nullable;
2829

2930
import org.spdx.core.InvalidSPDXAnalysisException;
3031
import org.spdx.core.TypedValue;
@@ -184,7 +185,7 @@ public void removeProperty(String objectUri,
184185
* @see org.spdx.storage.IModelStore#getAllItems(java.lang.String, java.lang.String)
185186
*/
186187
@Override
187-
public Stream<TypedValue> getAllItems(String nameSpace, String typeFilter)
188+
public Stream<TypedValue> getAllItems(@Nullable String nameSpace, @Nullable String typeFilter)
188189
throws InvalidSPDXAnalysisException {
189190
return baseStore.getAllItems(nameSpace, typeFilter).filter(tv -> !tv.getSpecVersion().startsWith("3."));
190191
}

src/main/java/org/spdx/storage/listedlicense/SpdxV3ListedLicenseModelStore.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Optional;
2525
import java.util.Set;
2626
import java.util.stream.Stream;
27+
import javax.annotation.Nullable;
2728

2829
import org.spdx.core.InvalidSPDXAnalysisException;
2930
import org.spdx.core.TypedValue;
@@ -194,7 +195,7 @@ public void removeProperty(String objectUri,
194195
* @see org.spdx.storage.IModelStore#getAllItems(java.lang.String, java.lang.String)
195196
*/
196197
@Override
197-
public Stream<TypedValue> getAllItems(String nameSpace, String typeFilter)
198+
public Stream<TypedValue> getAllItems(@Nullable String nameSpace, @Nullable String typeFilter)
198199
throws InvalidSPDXAnalysisException {
199200
return baseStore.getAllItems(nameSpace, typeFilter).filter(tv -> tv.getSpecVersion().startsWith("3."));
200201
}

src/main/java/org/spdx/storage/simple/ExtendedSpdxStore.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Optional;
2323
import java.util.stream.Collectors;
2424
import java.util.stream.Stream;
25+
import javax.annotation.Nullable;
2526

2627
import org.spdx.core.InvalidSPDXAnalysisException;
2728
import org.spdx.core.TypedValue;
@@ -111,7 +112,7 @@ public void removeProperty(String objectUri, PropertyDescriptor propertyDescript
111112
* @see org.spdx.storage.IModelStore#getAllItems(java.lang.String, java.lang.String)
112113
*/
113114
@Override
114-
public Stream<TypedValue> getAllItems(String documentUri, String typeFilter) throws InvalidSPDXAnalysisException {
115+
public Stream<TypedValue> getAllItems(@Nullable String documentUri, @Nullable String typeFilter) throws InvalidSPDXAnalysisException {
115116
return baseStore.getAllItems(documentUri, typeFilter);
116117
}
117118

src/main/java/org/spdx/utility/license/LicenseExpressionParser.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,7 @@ private static AnyLicenseInfo parseSimpleLicenseToken(String token, IModelStore
505505
}
506506

507507
/**
508+
* Converts an external reference to a full object URI
508509
* @param externalReference String of the form [prefix]:[id] where [prefix] is a prefix in the customIdToUri and ID is the suffix of the object URI
509510
* @param customIdToUri Mapping of the id prefixes used in the license expression to the namespace preceding the external ID
510511
* @return the full object URI with the [prefix] replaced by the associated namespace
@@ -519,13 +520,15 @@ private static String convertToExternalObjectUri(String externalReference, @Null
519520
throw new LicenseParserException("Invalid external ID: "+externalReference);
520521
}
521522
String namespace = null;
522-
for (DictionaryEntry entry:customIdToUri) {
523-
if (refParts[0].equals(entry.getIdPrefix())) {
524-
Optional<String> entryValue = entry.getValue();
525-
if (!entryValue.isPresent()) {
526-
throw new LicenseParserException("No associated namespace for license ID prefix "+entry.getIdPrefix());
523+
if (Objects.nonNull(customIdToUri)) {
524+
for (DictionaryEntry entry : customIdToUri) {
525+
if (refParts[0].equals(entry.getIdPrefix())) {
526+
Optional<String> entryValue = entry.getValue();
527+
if (!entryValue.isPresent()) {
528+
throw new LicenseParserException("No associated namespace for license ID prefix "+entry.getIdPrefix());
529+
}
530+
namespace = entryValue.get();
527531
}
528-
namespace = entryValue.get();
529532
}
530533
}
531534
if (Objects.isNull(namespace)) {

0 commit comments

Comments
 (0)