Compare commits

..

No commits in common. "f18f145ead76d38c0b8078b4e123e116c0b62c8c" and "ac278b6fef5a4efdf3d7eece4f698c47a98e8ffe" have entirely different histories.

2 changed files with 9 additions and 9 deletions

View file

@ -1,5 +1,4 @@
[![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![License](https://img.shields.io/badge/kotlin-1.8.0-blue)](https://kotlinlang.org/)
[![Nexus Snapshot](https://img.shields.io/nexus/s/net.thauvin.erik/urlencoder?server=https%3A%2F%2Foss.sonatype.org%2F)](https://oss.sonatype.org/content/repositories/snapshots/net/thauvin/erik/urlencoder/) [![Nexus Snapshot](https://img.shields.io/nexus/s/net.thauvin.erik/urlencoder?server=https%3A%2F%2Foss.sonatype.org%2F)](https://oss.sonatype.org/content/repositories/snapshots/net/thauvin/erik/urlencoder/)
[![Release](https://img.shields.io/github/release/ethauvin/urlencoder.svg)](https://github.com/ethauvin/urlencoder/releases/latest) [![Release](https://img.shields.io/github/release/ethauvin/urlencoder.svg)](https://github.com/ethauvin/urlencoder/releases/latest)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/net.thauvin.erik/urlencoder/badge.svg?color=blue)](https://maven-badges.herokuapp.com/maven-central/net.thauvin.erik/urlencoder) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/net.thauvin.erik/urlencoder/badge.svg?color=blue)](https://maven-badges.herokuapp.com/maven-central/net.thauvin.erik/urlencoder)

View file

@ -41,19 +41,18 @@ object UrlEncoder {
private val hexDigits = "0123456789ABCDEF".toCharArray() private val hexDigits = "0123456789ABCDEF".toCharArray()
internal val usage = internal val usage =
"Usage : java -jar urlencoder-*all.jar [-ed] text" + System.lineSeparator() + "Usage : java -jar urlencoder-*all.jar [-ed] text" + System.lineSeparator() +
"Encode and decode URL components defensively." + System.lineSeparator() + "Encode and decode URL components defensively." + System.lineSeparator() + " -e encode (default) " +
" -e encode (default) " + System.lineSeparator() + System.lineSeparator() + " -d decode"
" -d decode"
// see https://www.rfc-editor.org/rfc/rfc3986#page-13 // see https://www.rfc-editor.org/rfc/rfc3986#page-13
// and https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set // and https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set
private val unreservedChars = BitSet('z'.code + 1).apply { private val unreservedChars = BitSet('z'.code + 1).apply {
set('-'.code) set('-')
set('.'.code) set('.')
for (c in '0'.code..'9'.code) { for (c in '0'..'9') {
set(c) set(c)
} }
for (c in 'A'.code..'Z'.code) { for (c in 'A'..'Z') {
set(c) set(c)
} }
set('_'.code) set('_'.code)
@ -62,6 +61,8 @@ object UrlEncoder {
} }
} }
private fun BitSet.set(c: Char) = this.set(c.code)
// see https://www.rfc-editor.org/rfc/rfc3986#page-13 // see https://www.rfc-editor.org/rfc/rfc3986#page-13
// and https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set // and https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set
private fun Char.isUnreserved(): Boolean { private fun Char.isUnreserved(): Boolean {
@ -116,7 +117,7 @@ object UrlEncoder {
bytesBuffer[bytesPos++] = v.toByte() bytesBuffer[bytesPos++] = v.toByte()
i += 2 i += 2
} catch (e: NumberFormatException) { } catch (e: NumberFormatException) {
throw IllegalArgumentException("Illegal characters in escape sequence: $e.message", e) throw IllegalArgumentException("Illegal characters in escape sequence: $e.message")
} }
} else { } else {
if (bytesBuffer != null) { if (bytesBuffer != null) {