[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