Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions docs/_posts/2026-04-03-v4.14.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ type: patch
* Avoid NPE when computing Trivy pkgType - [apiserver/#5987]
* Remove leading whitespace from vulnerability badge SVG template - [apiserver/#6000]
* Fix Japanese Trivy analyzer strings - [frontend/#1489]
* Fix inability to store PURLs longer than 4096 characters - [apiserver/#6138]

**Upgrade Notes:**

* The types of the following columns are changed from `VARCHAR(786)` to `VARCHAR(4096)` automatically upon upgrade:
* `COMPONENT.PURL`
* `COMPONENT.PURLCOORDINATES`
* `COMPONENTANALYSISCACHE.TARGET`
* `PROJECT.PURL`

For a complete list of changes, refer to the respective GitHub milestones:

Expand Down Expand Up @@ -70,6 +79,7 @@ Special thanks to everyone who contributed code to implement enhancements and fi
[apiserver/#5995]: https://github.com/DependencyTrack/dependency-track/pull/5995
[apiserver/#5996]: https://github.com/DependencyTrack/dependency-track/pull/5996
[apiserver/#6000]: https://github.com/DependencyTrack/dependency-track/pull/6000
[apiserver/#6138]: https://github.com/DependencyTrack/dependency-track/pull/6138

[frontend/#1489]: https://github.com/DependencyTrack/frontend/pull/1489
[frontend/#1490]: https://github.com/DependencyTrack/frontend/pull/1490
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/org/dependencytrack/model/Component.java
Original file line number Diff line number Diff line change
Expand Up @@ -305,17 +305,17 @@ public enum FetchGroup {

@Persistent(defaultFetchGroup = "true")
@Index(name = "COMPONENT_PURL_IDX")
@Column(name = "PURL", length = 786)
@Size(max = 786)
@Column(name = "PURL", length = 4096)
@Size(max = 4096)
@com.github.packageurl.validator.PackageURL
@JsonDeserialize(using = TrimmedStringDeserializer.class)
@Schema(type = "string")
private String purl;

@Persistent(defaultFetchGroup = "true")
@Index(name = "COMPONENT_PURL_COORDINATES_IDX")
@Column(name = "PURLCOORDINATES", length = 786)
@Size(max = 786)
@Column(name = "PURLCOORDINATES", length = 4096)
@Size(max = 4096)
@com.github.packageurl.validator.PackageURL
@JsonDeserialize(using = TrimmedStringDeserializer.class)
private String purlCoordinates; // Field should contain only type, namespace, name, and version. Everything up to the qualifiers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public enum CacheType {
private String targetType;

@Persistent
@Column(name = "TARGET", allowsNull = "false", length = 786)
@Column(name = "TARGET", allowsNull = "false", length = 4096)
@NotNull
private String target;

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/org/dependencytrack/model/Project.java
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,8 @@ public enum FetchGroup {

@Persistent
@Index(name = "PROJECT_PURL_IDX")
@Column(name = "PURL", length = 786)
@Size(max = 786)
@Column(name = "PURL", length = 4096)
@Size(max = 4096)
@com.github.packageurl.validator.PackageURL
@JsonDeserialize(using = TrimmedStringDeserializer.class)
@Schema(type = "string")
Expand Down
26 changes: 13 additions & 13 deletions src/main/java/org/dependencytrack/upgrade/v4110/v4110Updater.java
Original file line number Diff line number Diff line change
Expand Up @@ -150,41 +150,41 @@ private static void computeVulnerabilitySeverities(final Connection connection)
}

private static void extendPurlColumnLengths(final Connection connection) throws Exception {
LOGGER.info("Extending length of PURL and PURLCOORDINATES columns from 255 to 786");
LOGGER.info("Extending length of PURL and PURLCOORDINATES columns from 786 to 4096");
if (DbUtil.isH2() || DbUtil.isPostgreSQL()) {
try (final Statement statement = connection.createStatement()) {
statement.addBatch("""
ALTER TABLE "COMPONENT" ALTER COLUMN "PURL" SET DATA TYPE VARCHAR(786)""");
ALTER TABLE "COMPONENT" ALTER COLUMN "PURL" SET DATA TYPE VARCHAR(4096)""");
statement.addBatch("""
ALTER TABLE "COMPONENT" ALTER COLUMN "PURLCOORDINATES" SET DATA TYPE VARCHAR(786)""");
ALTER TABLE "COMPONENT" ALTER COLUMN "PURLCOORDINATES" SET DATA TYPE VARCHAR(4096)""");
statement.addBatch("""
ALTER TABLE "COMPONENTANALYSISCACHE" ALTER COLUMN "TARGET" SET DATA TYPE VARCHAR(786)""");
ALTER TABLE "COMPONENTANALYSISCACHE" ALTER COLUMN "TARGET" SET DATA TYPE VARCHAR(4096)""");
statement.addBatch("""
ALTER TABLE "PROJECT" ALTER COLUMN "PURL" SET DATA TYPE VARCHAR(786)""");
ALTER TABLE "PROJECT" ALTER COLUMN "PURL" SET DATA TYPE VARCHAR(4096)""");
statement.executeBatch();
}
} else if (DbUtil.isMssql()) {
try (final Statement statement = connection.createStatement()) {
statement.addBatch("""
ALTER TABLE "COMPONENT" ALTER COLUMN "PURL" VARCHAR(786) NULL""");
ALTER TABLE "COMPONENT" ALTER COLUMN "PURL" VARCHAR(4096) NULL""");
statement.addBatch("""
ALTER TABLE "COMPONENT" ALTER COLUMN "PURLCOORDINATES" VARCHAR(786) NULL""");
ALTER TABLE "COMPONENT" ALTER COLUMN "PURLCOORDINATES" VARCHAR(4096) NULL""");
statement.addBatch("""
ALTER TABLE "COMPONENTANALYSISCACHE" ALTER COLUMN "TARGET" VARCHAR(786) NOT NULL""");
ALTER TABLE "COMPONENTANALYSISCACHE" ALTER COLUMN "TARGET" VARCHAR(4096) NOT NULL""");
statement.addBatch("""
ALTER TABLE "PROJECT" ALTER COLUMN "PURL" VARCHAR(786) NULL""");
ALTER TABLE "PROJECT" ALTER COLUMN "PURL" VARCHAR(4096) NULL""");
statement.executeBatch();
}
} else if (DbUtil.isMysql()) {
try (final Statement statement = connection.createStatement()) {
statement.addBatch("""
ALTER TABLE "COMPONENT" MODIFY COLUMN "PURL" VARCHAR(786)""");
ALTER TABLE "COMPONENT" MODIFY COLUMN "PURL" VARCHAR(4096)""");
statement.addBatch("""
ALTER TABLE "COMPONENT" MODIFY COLUMN "PURLCOORDINATES" VARCHAR(786)""");
ALTER TABLE "COMPONENT" MODIFY COLUMN "PURLCOORDINATES" VARCHAR(4096)""");
statement.addBatch("""
ALTER TABLE "COMPONENTANALYSISCACHE" MODIFY COLUMN "TARGET" VARCHAR(786)""");
ALTER TABLE "COMPONENTANALYSISCACHE" MODIFY COLUMN "TARGET" VARCHAR(4096)""");
statement.addBatch("""
ALTER TABLE "PROJECT" MODIFY COLUMN "PURL" VARCHAR(786)""");
ALTER TABLE "PROJECT" MODIFY COLUMN "PURL" VARCHAR(4096)""");
statement.executeBatch();
}
} else {
Expand Down