You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Changes since 0.12.2 on the 0.12.x maintenance branch.
Parsing fixes
Check unsigned integer ranges before expanding exponents, avoiding expensive
integer conversion for out-of-range values such as 1e100000000. Valid unsigned
boundaries and integral decimal/exponent forms remain supported.
Treat enum integers outside the signed 32-bit range as invalid instead of
truncating them into potentially valid values. Proto3 parsing with ignoringUnknownFields retains its fallback to the zero enum value.
Preserve google.protobuf.NullValue oneof presence when reading JSON null.
Supplying another member of the same oneof now triggers overlap validation
instead of silently ignoring the null-valued member.
Accept standard and URL-safe Base64 bytes, with or without padding. Preserve
all forms accepted by the legacy decoder, including its whitespace handling.
Malformed Base64 now raises JsonFormatException rather than leaking the
decoder's IllegalArgumentException.
Preserve existing parsing defaults: this branch does not introduce master's
100-container nesting limit or 1024-character numeric-literal limit.
Dependencies and platform support
Update ScalaPB from 0.11.18 to 0.11.21, protobuf-java from 3.25.8 to 3.25.9, and json4s from 4.0.6 to 4.0.7.
Retain the ScalaPB 0.11.x, protobuf 3.x, and json4s 4.0.x dependency lines.
Update the Scala cross-build versions to 2.12.21, 2.13.18, and 3.3.8.
Retain Java 8 runtime support for all Scala builds. Building the project now
requires JDK 11 or newer, with explicit Java 8 bytecode and API targets.
Build and release validation
Validate all Scala builds on Java 8, 11, and 21, and check binary compatibility
against 0.12.2.
Run tests, formatting, and binary-compatibility checks on tag revisions before
publishing. Modernize publishing metadata and release tooling.
#1226 [2.10.x] Avoid running out of memory when parsing heavily nested arrays or objects by @mkurz
We now limit the maximum allowed nesting depth of JSON structures (arrays, objects, or a mix of both) to 1000.
This limit can be adjusted using the system property play.json.parser.maxNestingDepth.
We assume a depth of 1000 should be more than sufficient for virtually all real-world use cases.
This change helps prevent both potential OutOfMemoryErrors and StackOverflowErrors.
The latter, however, is not a concern for Play JSON, since it already uses a @tailrec-optimized parsing method.
As a result, Play JSON is not affected by CVE-2025-52999, which specifically addresses StackOverflowError risks.
This improvement is simply an additional safety measure.
If you find this OSS project useful for work, please consider asking your company to support it by becoming a sponsor.
You can also individually sponsor the project by becoming a backer.
🙇 Thanks to our contributors
Finally, thanks to the community for their help with detailed bug reports, discussions about new features and pull request reviews. This project is only possible due to the help we had from amazing contributors.
Special thanks to all code contributors who helped with this particular release (they are listed below)!
If you find this OSS project useful for work, please consider asking your company to support it by becoming a sponsor.
You can also individually sponsor the project by becoming a backer.
🙇 Thanks to our contributors
Finally, thanks to the community for their help with detailed bug reports, discussions about new features and pull request reviews. This project is only possible due to the help we had from amazing contributors.
Special thanks to all code contributors who helped with this particular release (they are listed below)!
feat: invalidate the prepared-statement cache when the server reports a search_path change via GUC_REPORT (PostgreSQL 18+), so cached plans are no longer used against the wrong schema PR #4259
feat: reWriteBatchedInserts now merges up to 32768 rows into one multi-values INSERT (bounded by the 65535 bind-parameter limit on the extended protocol) instead of capping at 128, which speeds up batches of few-column rows. The new reWriteBatchedInsertsSize connection property lowers that cap when set; the default of 0 uses that maximum. PR #4207
feat: invalidate the prepared-statement cache after CREATE/DROP/ALTER so callers no longer trip on "cached plan must not change result type" without opting into autosave=ALWAYS. Controlled by the new flushCacheOnDdl connection property (default true); set to false for the prior behaviour. PR #4067
feat: add connectExecutor connection property to customize the Executor used to run the worker task that performs the connection attempt when loginTimeout is in effect. The value is the fully qualified name of a class implementing java.util.concurrent.Executor. With a null value, the default, the driver retains the prior behavior of running the connection attempt on a daemon thread named "PostgreSQL JDBC driver connection thread". The executor must run the task on a thread other than the caller's. Running the attempt on a named thread lets applications that monitor driver-created threads identify it. PR #4165
feat: add classLoaderStrategy connection property to control which classloaders the driver searches when loading a class named by a connection property, for example socketFactory. The default driver-first now falls back to the thread context classloader when the driver's classloader cannot resolve the class, which fixes class loading in non-flat class paths such as Quarkus and OSGi. Set driver to keep the previous driver-classloader-only behaviour, or context-first to prefer the thread context classloader Issue #2112PR #4167
feat: add OID constants for geometric arrays, RECORD, and refcursorPR #4220
feat: LargeObjectBlobInputStream now skips by seeking instead of reading, and the driver exposes the server version so it can select the 64-bit large-object API where available PR #4204
Changed
refactor: the worker that runs the connection attempt under loginTimeout is now a FutureTask (ConnectTask) instead of the hand-rolled ConnectThread. When the caller hits the timeout, the task is now cancelled with cancel(true), which interrupts the worker thread rather than letting it run to completion. This makes the connection attempt interruptible, so loginTimeout can stop a slow connection attempt instead of leaking a thread. As before, a connection that the worker still manages to establish after the caller gives up is closed by the worker so that it does not leak. There are no public API changes and this should only lead to faster background resource cleanup for connections that time out. PR #4120
chore: PGXAConnection.ConnectionHandler now rejects setAutoCommit(false) and setSavepoint(...) during an active XA branch, in addition to the long-rejected setAutoCommit(true) / commit() / rollback(). The setSavepoint rejection was already meant to be in place but the guard misspelled the method name as setSavePoint, so savepoints silently went through. Both changes bring the proxy in line with JTA 1.2 §3.4. PR #4114
chore: commitPrepared / rollback-of-prepared now return XAER_RMFAIL instead of XAER_RMERR when the underlying connection is left in a non-idle TransactionState. Transaction managers (Geronimo, Narayana, Atomikos) treat XAER_RMFAIL as retryable on a fresh XAResource; the prepared transaction is no longer abandoned. PR #4114
refactor: derive getPrimaryKeys from pg_constraint.conkeyPR #4202
Fixed
fix: the published GitHub release now ships the released postgresql-<version>.jar and its detached PGP signature, taken from the same signed build that is uploaded to Maven Central, instead of a leftover SNAPSHOT jar Issue #3812PR #3814
fix: simplify the Statement#cancel state machine by dropping the redundant CANCELLED state. killTimerTask now waits for the state to return to IDLE directly, which removes a spin-forever case when more than one thread observes the cancel completing PR #1827.
perf: defer simple-query flushes until the driver reads the response, allowing BEGIN and the following query to share a network flush Issue #3894PR #4196
fix: reWriteBatchedInserts no longer throws IllegalArgumentException when batching a parameterless INSERT (for example INSERT INTO t VALUES (1, 2)) of 256 rows or more PR #4207
fix: a comment before CALL in a CallableStatement no longer hides the native call, so OUT parameter registration works for /* comment */ call proc(?, ?) and similar. Parser.modifyJdbcCall now skips leading whitespace and SQL comments (both -- and /* */) before the call, tolerates a trailing comment after a { ... } escape, and no longer adds a spurious comma when moving an OUT parameter into a call whose arguments are only a comment Issue #2538PR #4209
fix: PreparedStatement.toString() no longer throws for a bytea value supplied as text via PGobject. Hex-format values (\x...) are validated and rendered as a bytea literal, and escape-format values are quoted and cast like any other literal Issue #3757PR #4201
fix: the driver no longer nulls the contextClassLoader of shared ForkJoinPool.commonPool() worker threads, which previously left unrelated tasks on those threads running with a null classloader Issue #4155PR #4156
fix: PgResultSet#getCharacterStream wraps String in a StringReaderPR #4063
fix: PGXAConnection no longer saves and restores the underlying connection's JDBC autoCommit flag. All XA-protocol SQL (BEGIN, PREPARE TRANSACTION, COMMIT, ROLLBACK, COMMIT PREPARED, ROLLBACK PREPARED, the recover() SELECT) is sent through QUERY_SUPPRESS_BEGIN, so the caller's autoCommit value is invariant across every XAResource call. Fixes the "2nd phase commit must be issued using an idle connection" failure during recovery on managed datasources that pool connections with autoCommit=false (TomEE, WildFly, WebSphere Liberty) PR #4114
fix: PGXAConnection.prepare() now mutates XA state only after PREPARE TRANSACTION succeeds. A failed PREPARE previously left the driver thinking the branch was already prepared, so the follow-up rollback(xid) tried ROLLBACK PREPARED against a non-existent gid and returned XAER_RMERR. Transaction managers (Narayana) escalated this to HeuristicMixedException. With the fix, rollback(xid) takes the active-branch path and issues a plain ROLLBACK, which the server accepts cleanly. Fixes Issue #3153, Issue #3123. PR #4114
fix: an updatable result set over an unqualified table name is now classified using only the table visible through search_path. When two schemas held a table with the same name and the same primary or unique index name but a different set of key columns, the driver took the union of both schemas' columns, so the result set could be wrongly rejected as not updatable PR #4214. Supersedes PR #3400.
fix: LargeObject.close() now flushes a buffered output stream before marking the object closed, so closing a large object without an explicit flush() no longer drops buffered writes. The flush runs while the object is still open (it calls back into LargeObject.write()), and lo_close always runs afterward; a failure from lo_close no longer masks an earlier flush error, and the transaction is not committed when the flush failed Issue #4247PR #4248.
fix: reject empty timestamp, timestamptz, and date text with a clear SQLException (SQLState 22007) instead of an ArrayIndexOutOfBoundsExceptionPR #4278
fix: return null CHAR_OCTET_LENGTH for non-character columns PR #4231
fix: honor scale in ResultSet.getBigDecimal(int, int)PR #4211
fix: support java.time values in an updatable ResultSetupdateRow() / insertRow()PR #3848
fix: improve batching when the RETURNING clause contains varchar or numeric types PR #4014
fix: correct estimatedReceiveBufferBytes accounting after a forced SyncPR #4014
fix: avoid creating a transient ResultSet for describe-statement purposes, and restore the pre-describe path for generated-key batches PR #4014
fix: add an explicit failure message when a multi-statement command executes in a batch PR #4014
Compared against main 98b875f benchmarked on this same runner, so the delta is largely free of cross-runner hardware noise. The "7d avg" column still reflects the gh-pages dashboard. Treat <±5% as noise unless repeated.
View the top 2 failed test(s) by shortest run time
org.apache.texera.service.NotebookMigrationServiceRunSpec::NotebookMigrationService.initialize should register the Scala module on Dropwizard's object mapper
Stack Traces | 0.055s run time
org.scalatest.exceptions.TestFailedException: "{[]}" was not equal to "{["notebookName":"notebook.ipynb","cellOutcomes":{"migrated":[1,2],"failed":null}]}"
at org.scalatest.matchers.MatchersHelper$.indicateFailure(MatchersHelper.scala:392)
at org.scalatest.matchers.should.Matchers$AnyShouldWrapper.shouldBe(Matchers.scala:7539)
at org.apache.texera.service.NotebookMigrationServiceRunSpec.$anonfun$new$4(NotebookMigrationServiceRunSpec.scala:208)
at org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85)
at org.scalatest.OutcomeOf.outcomeOf$(OutcomeOf.scala:83)
at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
at org.scalatest.Transformer.apply(Transformer.scala:22)
at org.scalatest.Transformer.apply(Transformer.scala:20)
at org.scalatest.flatspec.AnyFlatSpecLike$$anon$5.apply(AnyFlatSpecLike.scala:1832)
at org.scalatest.TestSuite.withFixture(TestSuite.scala:196)
at org.scalatest.TestSuite.withFixture$(TestSuite.scala:195)
at org.scalatest.flatspec.AnyFlatSpec.withFixture(AnyFlatSpec.scala:1686)
at org.scalatest.flatspec.AnyFlatSpecLike.invokeWithFixture$1(AnyFlatSpecLike.scala:1830)
at org.scalatest.flatspec.AnyFlatSpecLike.$anonfun$runTest$1(AnyFlatSpecLike.scala:1842)
at org.scalatest.SuperEngine.runTestImpl(Engine.scala:306)
at org.scalatest.flatspec.AnyFlatSpecLike.runTest(AnyFlatSpecLike.scala:1842)
at org.scalatest.flatspec.AnyFlatSpecLike.runTest$(AnyFlatSpecLike.scala:1824)
at org.scalatest.flatspec.AnyFlatSpec.runTest(AnyFlatSpec.scala:1686)
at org.scalatest.flatspec.AnyFlatSpecLike.$anonfun$runTests$1(AnyFlatSpecLike.scala:1900)
at org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:413)
at scala.collection.immutable.List.foreach(List.scala:323)
at org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:401)
at org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:390)
at org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:427)
at scala.collection.immutable.List.foreach(List.scala:323)
at org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:401)
at org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:396)
at org.scalatest.SuperEngine.runTestsImpl(Engine.scala:475)
at org.scalatest.flatspec.AnyFlatSpecLike.runTests(AnyFlatSpecLike.scala:1900)
at org.scalatest.flatspec.AnyFlatSpecLike.runTests$(AnyFlatSpecLike.scala:1899)
at org.scalatest.flatspec.AnyFlatSpec.runTests(AnyFlatSpec.scala:1686)
at org.scalatest.Suite.run(Suite.scala:1114)
at org.scalatest.Suite.run$(Suite.scala:1096)
at org.scalatest.flatspec.AnyFlatSpec.org$scalatest$flatspec$AnyFlatSpecLike$$super$run(AnyFlatSpec.scala:1686)
at org.scalatest.flatspec.AnyFlatSpecLike.$anonfun$run$1(AnyFlatSpecLike.scala:1945)
at org.scalatest.SuperEngine.runImpl(Engine.scala:535)
at org.scalatest.flatspec.AnyFlatSpecLike.run(AnyFlatSpecLike.scala:1945)
at org.scalatest.flatspec.AnyFlatSpecLike.run$(AnyFlatSpecLike.scala:1943)
at org.scalatest.flatspec.AnyFlatSpec.run(AnyFlatSpec.scala:1686)
at org.scalatest.tools.Framework.org$scalatest$tools$Framework$$runSuite(Framework.scala:321)
at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:517)
at sbt.TestRunner.runTest$1(TestFramework.scala:153)
at sbt.TestRunner.run(TestFramework.scala:168)
at sbt.TestFramework$$anon$3$$anonfun$$lessinit$greater$1.$anonfun$apply$1(TestFramework.scala:336)
at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:296)
at sbt.TestFramework$$anon$3$$anonfun$$lessinit$greater$1.apply(TestFramework.scala:336)
at sbt.TestFramework$$anon$3$$anonfun$$lessinit$greater$1.apply(TestFramework.scala:336)
at sbt.TestFunction.apply(TestFramework.scala:348)
at sbt.Tests$.$anonfun$toTask$1(Tests.scala:436)
at sbt.std.Transform$$anon$3.$anonfun$apply$2(Transform.scala:47)
at sbt.std.Transform$$anon$4.work(Transform.scala:69)
at sbt.Execute.$anonfun$submit$2(Execute.scala:283)
at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:24)
at sbt.Execute.work(Execute.scala:292)
at sbt.Execute.$anonfun$submit$1(Execute.scala:283)
at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:65)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
org.apache.texera.service.NotebookMigrationServiceRunSpec::NotebookMigrationService.initialize should open a connection pool against the configured JDBC URL
Stack Traces | 0.091s run time
com.fasterxml.jackson.databind.JsonMappingException: Scala module 2.18.8 requires Jackson Databind version >= 2.18.0 and < 2.19.0 - Found jackson-databind version 2.21.0
at com.fasterxml.jackson.module.scala.JacksonModule.setupModule(JacksonModule.scala:61)
at com.fasterxml.jackson.module.scala.JacksonModule.setupModule$(JacksonModule.scala:46)
at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:17)
at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:909)
at org.apache.texera.service.NotebookMigrationService.initialize(NotebookMigrationService.scala:52)
at org.apache.texera.service.NotebookMigrationServiceRunSpec.$anonfun$initialized$3(NotebookMigrationServiceRunSpec.scala:157)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
at scala.util.Try$.apply(Try.scala:217)
at org.apache.texera.service.NotebookMigrationServiceRunSpec.initialized$lzycompute(NotebookMigrationServiceRunSpec.scala:157)
at org.apache.texera.service.NotebookMigrationServiceRunSpec.initialized(NotebookMigrationServiceRunSpec.scala:140)
at org.apache.texera.service.NotebookMigrationServiceRunSpec.resolve(NotebookMigrationServiceRunSpec.scala:174)
at org.apache.texera.service.NotebookMigrationServiceRunSpec.$anonfun$new$2(NotebookMigrationServiceRunSpec.scala:184)
at org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85)
at org.scalatest.OutcomeOf.outcomeOf$(OutcomeOf.scala:83)
at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
at org.scalatest.Transformer.apply(Transformer.scala:22)
at org.scalatest.Transformer.apply(Transformer.scala:20)
at org.scalatest.flatspec.AnyFlatSpecLike$$anon$5.apply(AnyFlatSpecLike.scala:1832)
at org.scalatest.TestSuite.withFixture(TestSuite.scala:196)
at org.scalatest.TestSuite.withFixture$(TestSuite.scala:195)
at org.scalatest.flatspec.AnyFlatSpec.withFixture(AnyFlatSpec.scala:1686)
at org.scalatest.flatspec.AnyFlatSpecLike.invokeWithFixture$1(AnyFlatSpecLike.scala:1830)
at org.scalatest.flatspec.AnyFlatSpecLike.$anonfun$runTest$1(AnyFlatSpecLike.scala:1842)
at org.scalatest.SuperEngine.runTestImpl(Engine.scala:306)
at org.scalatest.flatspec.AnyFlatSpecLike.runTest(AnyFlatSpecLike.scala:1842)
at org.scalatest.flatspec.AnyFlatSpecLike.runTest$(AnyFlatSpecLike.scala:1824)
at org.scalatest.flatspec.AnyFlatSpec.runTest(AnyFlatSpec.scala:1686)
at org.scalatest.flatspec.AnyFlatSpecLike.$anonfun$runTests$1(AnyFlatSpecLike.scala:1900)
at org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:413)
at scala.collection.immutable.List.foreach(List.scala:323)
at org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:401)
at org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:390)
at org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:427)
at scala.collection.immutable.List.foreach(List.scala:323)
at org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:401)
at org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:396)
at org.scalatest.SuperEngine.runTestsImpl(Engine.scala:475)
at org.scalatest.flatspec.AnyFlatSpecLike.runTests(AnyFlatSpecLike.scala:1900)
at org.scalatest.flatspec.AnyFlatSpecLike.runTests$(AnyFlatSpecLike.scala:1899)
at org.scalatest.flatspec.AnyFlatSpec.runTests(AnyFlatSpec.scala:1686)
at org.scalatest.Suite.run(Suite.scala:1114)
at org.scalatest.Suite.run$(Suite.scala:1096)
at org.scalatest.flatspec.AnyFlatSpec.org$scalatest$flatspec$AnyFlatSpecLike$$super$run(AnyFlatSpec.scala:1686)
at org.scalatest.flatspec.AnyFlatSpecLike.$anonfun$run$1(AnyFlatSpecLike.scala:1945)
at org.scalatest.SuperEngine.runImpl(Engine.scala:535)
at org.scalatest.flatspec.AnyFlatSpecLike.run(AnyFlatSpecLike.scala:1945)
at org.scalatest.flatspec.AnyFlatSpecLike.run$(AnyFlatSpecLike.scala:1943)
at org.scalatest.flatspec.AnyFlatSpec.run(AnyFlatSpec.scala:1686)
at org.scalatest.tools.Framework.org$scalatest$tools$Framework$$runSuite(Framework.scala:321)
at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:517)
at sbt.TestRunner.runTest$1(TestFramework.scala:153)
at sbt.TestRunner.run(TestFramework.scala:168)
at sbt.TestFramework$$anon$3$$anonfun$$lessinit$greater$1.$anonfun$apply$1(TestFramework.scala:336)
at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:296)
at sbt.TestFramework$$anon$3$$anonfun$$lessinit$greater$1.apply(TestFramework.scala:336)
at sbt.TestFramework$$anon$3$$anonfun$$lessinit$greater$1.apply(TestFramework.scala:336)
at sbt.TestFunction.apply(TestFramework.scala:348)
at sbt.Tests$.$anonfun$toTask$1(Tests.scala:436)
at sbt.std.Transform$$anon$3.$anonfun$apply$2(Transform.scala:47)
at sbt.std.Transform$$anon$4.work(Transform.scala:69)
at sbt.Execute.$anonfun$submit$2(Execute.scala:283)
at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:24)
at sbt.Execute.work(Execute.scala:292)
at sbt.Execute.$anonfun$submit$1(Execute.scala:283)
at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:65)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
0.14.7→0.14.90.14.6→0.14.92.9.0→2.9.23.14.2→3.14.50.11.20→0.11.210.12.0→0.12.30.12.2→0.12.32.10.6→2.10.83.9.5→3.9.61.4.6→1.4.91.5.1→1.5.21.5.2→1.5.34.0.7→4.0.174.0.7→4.0.171.3.23→1.3.291.3.23→1.3.294.0.7→4.0.174.0.7→4.0.171.3.23→1.3.294.0.7→4.0.174.8.184→4.8.1994.8.157→4.8.1994.8.184→4.8.19921.0.0→21.0.2-legacy4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final4.2.15.Final→4.2.19.Final3.2→3.2.11.7.0→1.7.11.7.0→1.7.11.7.0→1.7.11.7.0→1.7.11.7.0→1.7.11.7.0→1.7.11.7.0→1.7.11.7.0→1.7.11.7.0→1.7.10.9.6→0.9.79.4.20.v20190813→9.4.58.v202508149.4.20.v20190813→9.4.58.v2025081411.0.24→11.0.269.4.20.v20190813→9.4.58.v202508145.13.0.202109080827-r→5.13.5.202508271544-r0.4.3→0.4.43.1.0-M1→3.1.0-M1042.7.13→42.7.1442.7.10→42.7.143.2.15→3.2.203.2.17→3.2.201.7.26→1.7.36Release Notes
scalacenter/sbt-scalafix (ch.epfl.scala:sbt-scalafix)
v0.14.9Compare Source
Pull Requests
v0.14.8Compare Source
Pull Requests
scalapb/scalapb-json4s (com.thesamet.scalapb:scalapb-json4s)
v0.12.3Compare Source
Changes since
0.12.2on the0.12.xmaintenance branch.Parsing fixes
integer conversion for out-of-range values such as
1e100000000. Valid unsignedboundaries and integral decimal/exponent forms remain supported.
truncating them into potentially valid values. Proto3 parsing with
ignoringUnknownFieldsretains its fallback to the zero enum value.google.protobuf.NullValueoneof presence when reading JSONnull.Supplying another member of the same oneof now triggers overlap validation
instead of silently ignoring the null-valued member.
all forms accepted by the legacy decoder, including its whitespace handling.
Malformed Base64 now raises
JsonFormatExceptionrather than leaking thedecoder's
IllegalArgumentException.100-container nesting limit or 1024-character numeric-literal limit.
Dependencies and platform support
0.11.18to0.11.21, protobuf-java from3.25.8to3.25.9, and json4s from4.0.6to4.0.7.2.12.21,2.13.18, and3.3.8.requires JDK 11 or newer, with explicit Java 8 bytecode and API targets.
Build and release validation
against
0.12.2.publishing. Modernize publishing metadata and release tooling.
v0.12.2Compare Source
v0.12.1Compare Source
playframework/play-json (com.typesafe.play:play-json)
v2.10.8: Play JSON 2.10.8Compare Source
Noteworthy improvements
This limit can be adjusted using the system property
play.json.parser.maxNestingDepth.We assume a depth of 1000 should be more than sufficient for virtually all real-world use cases.
This change helps prevent both potential
OutOfMemoryErrors andStackOverflowErrors.The latter, however, is not a concern for Play JSON, since it already uses a
@tailrec-optimized parsing method.As a result, Play JSON is not affected by CVE-2025-52999, which specifically addresses
StackOverflowErrorrisks.This improvement is simply an additional safety measure.
Changes
❤️ Thanks to our premium sponsors!
If you find this OSS project useful for work, please consider asking your company to support it by becoming a sponsor.
You can also individually sponsor the project by becoming a backer.
🙇 Thanks to our contributors
Finally, thanks to the community for their help with detailed bug reports, discussions about new features and pull request reviews. This project is only possible due to the help we had from amazing contributors.
Special thanks to all code contributors who helped with this particular release (they are listed below)!
v2.10.7: Play JSON 2.10.7Compare Source
Noteworthy Scala 3 improvements
Changes
Dependency Graphaction (backport #1114) by @ihostage by @mergify[bot]❤️ Thanks to our premium sponsors!
If you find this OSS project useful for work, please consider asking your company to support it by becoming a sponsor.
You can also individually sponsor the project by becoming a backer.
🙇 Thanks to our contributors
Finally, thanks to the community for their help with detailed bug reports, discussions about new features and pull request reviews. This project is only possible due to the help we had from amazing contributors.
Special thanks to all code contributors who helped with this particular release (they are listed below)!
lightbend/scala-logging (com.typesafe.scala-logging:scala-logging)
v3.9.6Compare Source
What's Changed
New Contributors
Full Changelog: scala-garden/scala-logging@v3.9.5...v3.9.6
lightbend/config (com.typesafe:config)
v1.4.9Compare Source
What's Changed
New Contributors
Full Changelog: lightbend/config@v1.4.8...v1.4.9
v1.4.8Compare Source
What's Changed
Full Changelog: lightbend/config@v1.4.7...v1.4.8
v1.4.7Compare Source
What's Changed
New Contributors
Full Changelog: lightbend/config@v1.4.6...v1.4.7
altoo-ag/pekko-kryo-serialization (io.altoo:pekko-kryo-serialization)
v1.5.2Compare Source
What's Changed
Full Changelog: altoo-ag/pekko-kryo-serialization@v1.5.1...v1.5.2
altoo-ag/scala-kryo-serialization (io.altoo:scala-kryo-serialization)
v1.5.3Compare Source
What's Changed
Full Changelog: altoo-ag/scala-kryo-serialization@v1.5.2...v1.5.3
kubernetes-client/java (io.kubernetes:client-java)
v21.0.2-legacyCompare Source
[maven-release-plugin] copy for tag v21.0.2-legacy
v21.0.1Compare Source
v21.0.0-legacyCompare Source
apache/pekko (org.apache.pekko:pekko-actor)
v1.7.1Compare Source
ehcache/sizeof (org.ehcache:sizeof)
v0.4.4Compare Source
pgjdbc/pgjdbc (org.postgresql:postgresql)
v42.7.13Added
search_pathchange via GUC_REPORT (PostgreSQL 18+), so cached plans are no longer used against the wrong schema PR #4259reWriteBatchedInsertsnow merges up to 32768 rows into one multi-valuesINSERT(bounded by the 65535 bind-parameter limit on the extended protocol) instead of capping at 128, which speeds up batches of few-column rows. The newreWriteBatchedInsertsSizeconnection property lowers that cap when set; the default of0uses that maximum. PR #4207autosave=ALWAYS. Controlled by the newflushCacheOnDdlconnection property (defaulttrue); set tofalsefor the prior behaviour. PR #4067connectExecutorconnection property to customize theExecutorused to run the worker task that performs the connection attempt whenloginTimeoutis in effect. The value is the fully qualified name of a class implementingjava.util.concurrent.Executor. With a null value, the default, the driver retains the prior behavior of running the connection attempt on a daemon thread named"PostgreSQL JDBC driver connection thread". The executor must run the task on a thread other than the caller's. Running the attempt on a named thread lets applications that monitor driver-created threads identify it. PR #4165classLoaderStrategyconnection property to control which classloaders the driver searches when loading a class named by a connection property, for examplesocketFactory. The defaultdriver-firstnow falls back to the thread context classloader when the driver's classloader cannot resolve the class, which fixes class loading in non-flat class paths such as Quarkus and OSGi. Setdriverto keep the previous driver-classloader-only behaviour, orcontext-firstto prefer the thread context classloader Issue #2112 PR #4167RECORD, andrefcursorPR #4220LargeObjectBlobInputStreamnow skips by seeking instead of reading, and the driver exposes the server version so it can select the 64-bit large-object API where available PR #4204Changed
loginTimeoutis now aFutureTask(ConnectTask) instead of the hand-rolledConnectThread. When the caller hits the timeout, the task is now cancelled withcancel(true), which interrupts the worker thread rather than letting it run to completion. This makes the connection attempt interruptible, sologinTimeoutcan stop a slow connection attempt instead of leaking a thread. As before, a connection that the worker still manages to establish after the caller gives up is closed by the worker so that it does not leak. There are no public API changes and this should only lead to faster background resource cleanup for connections that time out. PR #4120PGXAConnection.ConnectionHandlernow rejectssetAutoCommit(false)andsetSavepoint(...)during an active XA branch, in addition to the long-rejectedsetAutoCommit(true)/commit()/rollback(). ThesetSavepointrejection was already meant to be in place but the guard misspelled the method name assetSavePoint, so savepoints silently went through. Both changes bring the proxy in line with JTA 1.2 §3.4. PR #4114commitPrepared/rollback-of-prepared now returnXAER_RMFAILinstead ofXAER_RMERRwhen the underlying connection is left in a non-idleTransactionState. Transaction managers (Geronimo, Narayana, Atomikos) treatXAER_RMFAILas retryable on a freshXAResource; the prepared transaction is no longer abandoned. PR #4114getPrimaryKeysfrompg_constraint.conkeyPR #4202Fixed
postgresql-<version>.jarand its detached PGP signature, taken from the same signed build that is uploaded to Maven Central, instead of a leftover SNAPSHOT jar Issue #3812 PR #3814Statement#cancelstate machine by dropping the redundantCANCELLEDstate.killTimerTasknow waits for the state to return toIDLEdirectly, which removes a spin-forever case when more than one thread observes the cancel completing PR #1827.BEGINand the following query to share a network flush Issue #3894 PR #4196reWriteBatchedInsertsno longer throwsIllegalArgumentExceptionwhen batching a parameterlessINSERT(for exampleINSERT INTO t VALUES (1, 2)) of 256 rows or more PR #4207CALLin aCallableStatementno longer hides the native call, so OUT parameter registration works for/* comment */ call proc(?, ?)and similar.Parser.modifyJdbcCallnow skips leading whitespace and SQL comments (both--and/* */) before the call, tolerates a trailing comment after a{ ... }escape, and no longer adds a spurious comma when moving an OUT parameter into a call whose arguments are only a comment Issue #2538 PR #4209PreparedStatement.toString()no longer throws for abyteavalue supplied as text viaPGobject. Hex-format values (\x...) are validated and rendered as abytealiteral, and escape-format values are quoted and cast like any other literal Issue #3757 PR #4201contextClassLoaderof sharedForkJoinPool.commonPool()worker threads, which previously left unrelated tasks on those threads running with anullclassloader Issue #4155 PR #4156PgResultSet#getCharacterStreamwrapsStringin aStringReaderPR #4063PGXAConnectionno longer saves and restores the underlying connection's JDBCautoCommitflag. All XA-protocol SQL (BEGIN,PREPARE TRANSACTION,COMMIT,ROLLBACK,COMMIT PREPARED,ROLLBACK PREPARED, therecover()SELECT) is sent throughQUERY_SUPPRESS_BEGIN, so the caller'sautoCommitvalue is invariant across everyXAResourcecall. Fixes the "2nd phase commit must be issued using an idle connection" failure during recovery on managed datasources that pool connections withautoCommit=false(TomEE, WildFly, WebSphere Liberty) PR #4114PGXAConnection.prepare()now mutates XA state only afterPREPARE TRANSACTIONsucceeds. A failedPREPAREpreviously left the driver thinking the branch was already prepared, so the follow-uprollback(xid)triedROLLBACK PREPAREDagainst a non-existent gid and returnedXAER_RMERR. Transaction managers (Narayana) escalated this toHeuristicMixedException. With the fix,rollback(xid)takes the active-branch path and issues a plainROLLBACK, which the server accepts cleanly. Fixes Issue #3153, Issue #3123. PR #4114search_path. When two schemas held a table with the same name and the same primary or unique index name but a different set of key columns, the driver took the union of both schemas' columns, so the result set could be wrongly rejected as not updatable PR #4214. Supersedes PR #3400.LargeObject.close()now flushes a buffered output stream before marking the object closed, so closing a large object without an explicitflush()no longer drops buffered writes. The flush runs while the object is still open (it calls back intoLargeObject.write()), andlo_closealways runs afterward; a failure fromlo_closeno longer masks an earlier flush error, and the transaction is not committed when the flush failed Issue #4247 PR #4248.timestamp,timestamptz, anddatetext with a clearSQLException(SQLState22007) instead of anArrayIndexOutOfBoundsExceptionPR #4278CHAR_OCTET_LENGTHfor non-character columns PR #4231ResultSet.getBigDecimal(int, int)PR #4211java.timevalues in an updatableResultSetupdateRow()/insertRow()PR #3848RETURNINGclause containsvarcharornumerictypes PR #4014estimatedReceiveBufferBytesaccounting after a forcedSyncPR #4014ResultSetfor describe-statement purposes, and restore the pre-describe path for generated-key batches PR #4014search_pathchanges case-insensitively PR #4216.keyextension PR #3946KeyStoreso FIPS JVMs work [PR #4193](https://rediConfiguration
📅 Schedule: (in timezone Etc/UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.