[Git][clojure-team/ring-codec-clojure][upstream] New upstream version 1.2.0
Jérôme Charaoui (@lavamind)
gitlab at salsa.debian.org
Sun Jan 22 15:32:28 GMT 2023
Jérôme Charaoui pushed to branch upstream at Debian Clojure Maintainers / ring-codec-clojure
Commits:
b4bb38d2 by Jérôme Charaoui at 2023-01-22T10:20:02-05:00
New upstream version 1.2.0
- - - - -
4 changed files:
- README.md
- project.clj
- src/ring/util/codec.clj
- test/ring/util/test/codec.clj
Changes:
=====================================
README.md
=====================================
@@ -9,14 +9,14 @@ web applications.
To install, add the following to your project `:dependencies`:
- [ring/ring-codec "1.1.2"]
+ [ring/ring-codec "1.2.0"]
## Documentation
-* [API Docs](http://ring-clojure.github.com/ring-codec/ring.util.codec.html)
+* [API Docs](http://ring-clojure.github.io/ring-codec/ring.util.codec.html)
## License
-Copyright © 2019 James Reeves
+Copyright © 2021 James Reeves
Distributed under the MIT License, the same as Ring.
=====================================
project.clj
=====================================
@@ -1,19 +1,16 @@
-(defproject ring/ring-codec "1.1.2"
+(defproject ring/ring-codec "1.2.0"
:description "Library for encoding and decoding data"
:url "https://github.com/ring-clojure/ring-codec"
:license {:name "The MIT License"
:url "http://opensource.org/licenses/MIT"}
- :dependencies [[org.clojure/clojure "1.5.1"]
- [commons-codec "1.11"]]
- :plugins [[lein-codox "0.10.3"]]
+ :dependencies [[org.clojure/clojure "1.7.0"]]
+ :plugins [[lein-codox "0.10.7"]]
:codox
{:output-path "codox"
:source-uri "http://github.com/ring-clojure/ring-codec/blob/{version}/{filepath}#L{line}"}
- :aliases {"test-all" ["with-profile" "default:+1.6:+1.7:+1.8:+1.9:+1.10" "test"]}
+ :aliases {"test-all" ["with-profile" "default:+1.8:+1.9:+1.10" "test"]}
:profiles
- {:dev {:dependencies [[criterium "0.4.4"]]}
- :1.6 {:dependencies [[org.clojure/clojure "1.6.0"]]}
- :1.7 {:dependencies [[org.clojure/clojure "1.7.0"]]}
+ {:dev {:dependencies [[criterium "0.4.6"]]}
:1.8 {:dependencies [[org.clojure/clojure "1.8.0"]]}
:1.9 {:dependencies [[org.clojure/clojure "1.9.0"]]}
- :1.10 {:dependencies [[org.clojure/clojure "1.10.0"]]}})
+ :1.10 {:dependencies [[org.clojure/clojure "1.10.3"]]}})
=====================================
src/ring/util/codec.clj
=====================================
@@ -1,10 +1,10 @@
(ns ring.util.codec
"Functions for encoding and decoding data."
(:require [clojure.string :as str])
- (:import java.io.File
- java.util.Map
+ (:import java.util.Map
+ clojure.lang.MapEntry
[java.net URLEncoder URLDecoder]
- org.apache.commons.codec.binary.Base64))
+ [java.util Base64 StringTokenizer]))
(defn assoc-conj
"Associate a key with a value in a map. If the key already exists in the map,
@@ -78,13 +78,13 @@
(defn base64-encode
"Encode an array of bytes into a base64 encoded string."
- [unencoded]
- (String. (Base64/encodeBase64 unencoded)))
+ [^bytes unencoded]
+ (String. (.encode (Base64/getEncoder) unencoded)))
(defn base64-decode
"Decode a base64 encoded string into an array of bytes."
[^String encoded]
- (Base64/decodeBase64 (.getBytes encoded)))
+ (.decode (Base64/getDecoder) encoded))
(defprotocol ^:no-doc FormEncodeable
(form-encode* [x encoding]))
@@ -127,9 +127,25 @@
(form-decode-str encoded "UTF-8"))
([^String encoded ^String encoding]
(try
- (URLDecoder/decode encoded encoding)
+ (URLDecoder/decode encoded ^String (or encoding "UTF-8"))
(catch Exception _ nil))))
+(defn- tokenized [s delim]
+ (reify clojure.lang.IReduceInit
+ (reduce [_ f init]
+ (let [tokenizer (StringTokenizer. s delim)]
+ (loop [result init]
+ (if (.hasMoreTokens tokenizer)
+ (recur (f result (.nextToken tokenizer)))
+ result))))))
+
+(defn- split-key-value-pair [^String s]
+ (let [i (.indexOf s #=(int \=))]
+ (cond
+ (pos? i) (MapEntry. (.substring s 0 i) (.substring s (inc i)))
+ (zero? i) (MapEntry. "" (.substring s (inc i)))
+ :else (MapEntry. s ""))))
+
(defn form-decode
"Decode the supplied www-form-urlencoded string using the specified encoding,
or UTF-8 by default. If the encoded value is a string, a string is returned.
@@ -141,8 +157,11 @@
(form-decode-str encoded encoding)
(reduce
(fn [m param]
- (if-let [[k v] (str/split param #"=" 2)]
- (assoc-conj m (form-decode-str k encoding) (form-decode-str (or v "") encoding))
- m))
+ (let [kv (split-key-value-pair param)
+ k (form-decode-str (key kv) encoding)
+ v (form-decode-str (val kv) encoding)]
+ (if (and k v)
+ (assoc-conj m k v)
+ m)))
{}
- (str/split encoded #"&")))))
+ (tokenized encoded "&")))))
=====================================
test/ring/util/test/codec.clj
=====================================
@@ -53,7 +53,9 @@
(deftest test-form-decode-str
(is (= (form-decode-str "foo=bar+baz") "foo=bar baz"))
- (is (nil? (form-decode-str "%D"))))
+ (is (nil? (form-decode-str "%D")))
+ (is (= (form-decode-str "foo=bar+baz" nil) "foo=bar baz"))
+ (is (= (form-decode-str "foo=bar+baz" "UTF-8") "foo=bar baz")))
(deftest test-form-decode
(are [x y] (= (form-decode x) y)
@@ -65,6 +67,16 @@
"a=b%2Fc" {"a" "b/c"}
"a=b&c" {"a" "b" "c" ""}
"a=&b=c" {"a" "" "b" "c"}
- "a&b=c" {"a" "" "b" "c"})
+ "a&b=c" {"a" "" "b" "c"}
+ "=" {"" ""}
+ "a=" {"a" ""}
+ "=b" {"" "b"})
+ (testing "invalid URL encoding"
+ (are [x y] (= (form-decode x) y)
+ "%=b" {}
+ "a=%" {}
+ "%=%" {}))
(is (= (form-decode "a=foo%FE%FF%00%2Fbar" "UTF-16")
+ {"a" "foo/bar"}))
+ (is (= (form-decode "a=foo%2Fbar" nil)
{"a" "foo/bar"})))
View it on GitLab: https://salsa.debian.org/clojure-team/ring-codec-clojure/-/commit/b4bb38d2cf3cb2e775d355d2dc59943b3d8eb17a
--
View it on GitLab: https://salsa.debian.org/clojure-team/ring-codec-clojure/-/commit/b4bb38d2cf3cb2e775d355d2dc59943b3d8eb17a
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20230122/fc3195cb/attachment.htm>
More information about the pkg-java-commits
mailing list