Skip to content

Commit 5709c0c

Browse files
authored
Merge pull request #249 from OWASP/release/1.6.0
release: prepare Java Encoder 1.6.0
2 parents 300ef20 + d9b0fd6 commit 5709c0c

14 files changed

Lines changed: 158 additions & 40 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ unchanged. [1.5.1 is available from Central](releases/1.5.1-central-publication.
88

99
## Unreleased
1010

11+
No changes yet.
12+
13+
## 1.6.0 — release preparation
14+
15+
Publication is pending; see the [release record](releases/1.6.0.md).
16+
1117
- Reduce unnecessary script-letter escaping in `forJavaScript` and
1218
`forJavaScriptBlock` (#243). Interior letters remain readable; the input's last
1319
character is escaped if it is C, I, P, R, S, or T (either case). Existing punctuation escapes and

‎README.md‎

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ has no runtime dependencies; optional JSP and Jakarta adapters provide view-laye
99
bindings. Encoding is one part of [XSS prevention][xss], alongside
1010
safe templates, URL validation and other application controls.
1111

12-
**1.5.1 is available from Maven Central.** This patch release clarifies the
13-
JavaScript and JSON documentation and strengthens parser regression tests.
14-
Encoder behavior, public APIs, and runtime dependencies are unchanged from 1.5.0.
15-
See the [release notes](releases/1.5.1.md) and
16-
[publication verification](releases/1.5.1-central-publication.md).
12+
**1.6.0 release preparation:** this minor release reduces unnecessary JavaScript
13+
letter escaping while preserving recognized HTML-token protection across trusted
14+
fragments. Encoded bytes and streaming behavior change; see the
15+
[release notes](releases/1.6.0.md) for migration and verification.
16+
Publication is not complete; the dependency example below targets the prepared
17+
release. The latest verified Central release remains
18+
[1.5.1](releases/1.5.1-central-publication.md) until publication is confirmed.
1719

1820
The parser-boundary security fixes introduced in 1.5.0 remain in effect;
1921
versions through 1.4.1 do not contain those fixes. See
@@ -35,7 +37,7 @@ The three supported artifacts use group ID `org.owasp.encoder`:
3537
<dependency>
3638
<groupId>org.owasp.encoder</groupId>
3739
<artifactId>encoder</artifactId>
38-
<version>1.5.1</version>
40+
<version>1.6.0</version>
3941
</dependency>
4042
```
4143

@@ -46,9 +48,9 @@ on the same classpath or module path. See the [runtime matrix](compatibility/REA
4648
[dependency/license inventory](docs/dependencies.md).
4749

4850
`encoder-esapi` was retired after 1.4.1 and is not included or supported in
49-
1.5.x. Applications using it must [migrate away from the adapter](docs/encoder-esapi-retirement.md).
51+
1.5.x or 1.6.0. Applications using it must [migrate away from the adapter](docs/encoder-esapi-retirement.md).
5052

51-
Published 1.5.1 API documentation: [core](https://javadoc.io/doc/org.owasp.encoder/encoder/1.5.1/),
53+
Published 1.5.1 API documentation (1.6.0 indexing follows publication): [core](https://javadoc.io/doc/org.owasp.encoder/encoder/1.5.1/),
5254
[javax JSP](https://javadoc.io/doc/org.owasp.encoder/encoder-jsp/1.5.1/) and
5355
[Jakarta JSP](https://javadoc.io/doc/org.owasp.encoder/encoder-jakarta-jsp/1.5.1/).
5456

@@ -175,4 +177,4 @@ links distinguish maintainer support from OWASP Foundation donations.
175177
[xss]: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
176178
[java-libraries]: https://devguide.owasp.org/en/05-implementation/03-secure-libraries/04-java-secure-libs/
177179
[project]: https://owasp.org/projects/java-encoder
178-
[release]: https://github.com/OWASP/owasp-java-encoder/releases/tag/v1.5.1
180+
[release]: https://github.com/OWASP/owasp-java-encoder/releases/tag/v1.6.0

‎SECURITY.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
## Supported Versions
44

5+
Version **1.6.0** is being prepared as an output-encoding refinement. It preserves
6+
recognized HTML-token protection from 1.5.0 and introduces no new encoder
7+
security fix. Until [publication is verified](releases/1.6.0.md), 1.5.1 remains
8+
the current supported release shown below.
9+
510
Version **1.5.1**, published **2026-10-15 UTC**, is the current supported
611
release. This documentation and build-maintenance patch preserves the 1.5.0
712
security fixes and introduces no new encoder security fix. The

‎VERIFYING.md‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ identity authority. Obtain [KEYS](KEYS) from a trusted project revision and chec
66
the fingerprint before use. Never import private key material to verify a release.
77

88
For 1.4.1 and later releases until a documented rotation, the expected project key
9-
is `1C5F632B86809F2F5DB25092BEA0075F94074A9B`. The [1.5.1 publication verification](releases/1.5.1-central-publication.md)
10-
records the signed tag, exact bundle, and comparison of Central and GitHub
11-
downloads against the retained signed artifacts.
9+
is `1C5F632B86809F2F5DB25092BEA0075F94074A9B`. The [1.6.0 release record](releases/1.6.0.md#verification-and-evidence)
10+
tracks signing and publication of the prepared release. Do not treat a prepared
11+
release as available. The [1.5.1 publication verification](releases/1.5.1-central-publication.md)
12+
records the previous verified artifacts and signatures.
1213

1314
## Fresh public-only keyring
1415

1516
Download the artifact, its original `.asc`, and the trusted `KEYS`. This example
16-
targets the published 1.5.1 release. For historical releases, use the full
17+
targets 1.6.0 once its publication is verified. For historical releases, use the full
1718
fingerprint mapped below and review the historical key's expiry and algorithms.
1819
Commands use GnuPG and `shasum` (or equivalent SHA tools).
1920

@@ -22,7 +23,7 @@ verify_home=$(mktemp -d)
2223
chmod 700 "$verify_home"
2324
gpg --homedir "$verify_home" --batch --no-autostart --import KEYS
2425
expected_fingerprint=1C5F632B86809F2F5DB25092BEA0075F94074A9B
25-
artifact=encoder-1.5.1.jar
26+
artifact=encoder-1.6.0.jar
2627
gpg --homedir "$verify_home" --no-autostart --fingerprint "$expected_fingerprint"
2728
gpg --homedir "$verify_home" --batch --no-autostart --status-fd 1 \
2829
--verify "$artifact.asc" "$artifact" > signature.status || exit 1
@@ -45,7 +46,7 @@ A Maven `.sha256` sidecar usually contains **only a hex digest**, not a filename
4546
After fetching it over the intended distribution channel, form a check manifest:
4647

4748
```sh
48-
artifact=encoder-1.5.1.jar
49+
artifact=encoder-1.6.0.jar
4950
expected_hash=$(tr -d '[:space:]' < "$artifact.sha256")
5051
printf '%s\n' "$expected_hash" | grep -Eq '^[[:xdigit:]]{64}$' || exit 1
5152
printf '%s %s\n' "$expected_hash" "$artifact" | shasum -a 256 --check || exit 1

‎compatibility/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ fail these guards.
8484
During ordinary `./mvnw verify`, Animal Sniffer checks each library against the Java 8
8585
API signature. This catches linkage such as Java 9's covariant `CharBuffer.flip()`
8686
even when bytecode still has class version 52. japicmp checks public/protected API
87-
binary and source compatibility against **1.5.1** during **1.5.2-SNAPSHOT** development. The baseline guard selects the latest preceding semantic release tag,
87+
binary and source compatibility against **1.5.1** for the prepared **1.6.0** release. The baseline guard selects the latest preceding semantic release tag,
8888
including signed source commits integrated by squash merge; fetch all release tags
8989
before running it. The old support classpath matches the 1.5.1 POMs (JSP 2.3.3,
9090
Jakarta Servlet 6.1.0 and EL 6.0.1). Independent minimum-consumer fixtures remain

‎core/pom.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
<parent>
4343
<groupId>org.owasp.encoder</groupId>
4444
<artifactId>encoder-parent</artifactId>
45-
<version>1.5.2-SNAPSHOT</version>
45+
<version>1.6.0</version>
4646
</parent>
4747

4848
<artifactId>encoder</artifactId>

‎docs/compatibility-decisions.md‎

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,13 @@ the CDATA maximum is 13×. Large CDATA values should use a Writer facade or
6666
`EncodedWriter`; String facades retain the complete result but grow according to
6767
actual output rather than reserving the maximum bound.
6868

69-
## Unreleased JavaScript output refinement (#243)
69+
## JavaScript output refinement in 1.6.0 (#243)
7070

71-
Release recommendation: use a minor release (1.6.0), rather than assuming this
72-
is patch-compatible. The evaluated values and supported HTML tokenizer protection
71+
This change is prepared for the minor release 1.6.0, rather than a patch release. The evaluated values and supported HTML tokenizer protection
7372
remain intact, but encoded bytes, explicit-flush spelling, and the previous literal
74-
substring prohibition change. This proposal records the migration and parser
75-
validation requirements; the current development snapshot version is not release
76-
authorization. Existing published artifacts remain unchanged.
73+
substring prohibition change. This record describes the migration and parser
74+
validation requirements; release preparation does not establish publication.
75+
See the [release record](../releases/1.6.0.md) for status. Existing published artifacts remain unchanged.
7776

7877
The script-fragment protection remains, with less escaping of ordinary letters.
7978
HTML punctuation and whitespace still use the 1.5 escapes. Of the letters in

‎docs/contexts.md‎

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
# Output contexts and boundaries
22

3-
This guide describes the current development version, including the unreleased
4-
JavaScript refinement for #243. Published 1.5.0 and 1.5.1 retain their broader
5-
letter escapes; 1.5.1 clarified the 1.5.0 behavior without changing it. See the
6-
[1.5.1 release record](../releases/1.5.1.md) for publication status.
3+
This guide describes the prepared **1.6.0** release, including the JavaScript
4+
refinement for #243. Published 1.5.0 and 1.5.1 retain their broader letter escapes.
5+
See the [1.6.0 release record](../releases/1.6.0.md) for publication status.
76
The [Encode Javadoc source](../core/src/main/java/org/owasp/encoder/Encode.java) is
87
the detailed per-method contract; each method has a String-returning and a
98
`(Writer out, String input)` overload. `Encoders` exposes shared stateless encoders;
@@ -83,7 +82,7 @@ The general and block encoders prevent a nonempty encoded value from completing
8382
recognized `</script` or `<script` tokens (case-insensitive, followed by an HTML
8483
name delimiter), `<!--`, or `-->` with adjacent trusted literal text. They escape
8584
space, `!`, hyphen (`\x2d`), `<`, `>`, slash, and relevant controls throughout
86-
the input. In the unreleased refinement for #243, letters from `script` (either case) are escaped
85+
the input. In 1.6.0, letters from `script` (either case) are escaped
8786
only when they are the final input character. Interior letters remain readable;
8887
a longer name such as `</scripture>` is not a script end tag. This preserves
8988
HTML tokenizer containment while allowing harmless raw `</script` substrings

‎docs/usage.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Java and JSP examples
22

3-
These examples describe the current development version, including the
4-
**unreleased** JavaScript refinement for #243. Published **1.5.1** retains
5-
1.5.0's broader letter escaping; see the [release record](../releases/1.5.1.md).
3+
These examples target the prepared **1.6.0** release, including the JavaScript
4+
refinement for #243. See the [release record](../releases/1.6.0.md) for publication
5+
status. Published 1.5.1 retains 1.5.0's broader letter escaping.
66
Features marked **1.5** were introduced in 1.5.0.
77

88
## HTML and Writer output
@@ -62,8 +62,8 @@ result into an HTML-parsing API introduces another context to secure.
6262

6363
This correction changes emitted text. HTML-script JavaScript uses additional
6464
hex escapes (including `\x2d` for hyphen and escapes for both cases of the
65-
letters in `script`) while preserving the JavaScript string value. In the
66-
unreleased refinement for #243, only a final `C`, `I`, `P`, `R`, `S`, or `T` (either case) receives that
65+
letters in `script`) while preserving the JavaScript string value. In
66+
1.6.0, only a final `C`, `I`, `P`, `R`, `S`, or `T` (either case) receives that
6767
letter escape; interior letters remain readable. For example, `script` becomes
6868
`scrip\x74` and `http://google.com` becomes `http:\/\/google.com`.
6969
The punctuation and terminal-letter escapes together prevent recognized HTML
@@ -159,7 +159,7 @@ and the [packaged JSP engine checks](../compatibility/jsp-engine/README.md).
159159
## Java modules
160160

161161
The explicit module name for core is `owasp.encoder`. After verifying and obtaining
162-
`encoder-1.5.1.jar`, put that unchanged JAR in `lib/`, then create:
162+
`encoder-1.6.0.jar`, put that unchanged JAR in `lib/`, then create:
163163

164164
`src/example.app/module-info.java`:
165165

‎jakarta-test/pom.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<jackson.build.version>3.1.7</jackson.build.version>
3232
<!-- Must equal the version in the root pom.xml so this app tests the
3333
encoder-jakarta-jsp built in the same reactor. CI checks this. -->
34-
<encoder.version>1.5.2-SNAPSHOT</encoder.version>
34+
<encoder.version>1.6.0</encoder.version>
3535
</properties>
3636
<dependencies>
3737
<dependency>

0 commit comments

Comments
 (0)