summaryrefslogtreecommitdiff
path: root/jose
diff options
context:
space:
mode:
authorGraham Leggett <minfrin@apache.org>2018-09-02 22:30:43 +0000
committerGraham Leggett <minfrin@apache.org>2018-09-02 22:30:43 +0000
commitb372e142adb3ca2f67f432b549c2b5af141ead9d (patch)
tree8a217987822ac0707139152b76b029d4511128b6 /jose
parentcd6d71ec1cd0559de0d476e7f64361d4e4cd9782 (diff)
downloadapr-b372e142adb3ca2f67f432b549c2b5af141ead9d.tar.gz
Perform nesting level checks before each invocation of apr_jose_decode()
(when a jose structure has been created to carry the error message). git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1839897 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'jose')
-rw-r--r--jose/apr_jose_decode.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/jose/apr_jose_decode.c b/jose/apr_jose_decode.c
index defe06a34..7c1a90125 100644
--- a/jose/apr_jose_decode.c
+++ b/jose/apr_jose_decode.c
@@ -796,6 +796,13 @@ apr_status_t apr_jose_decode_compact(apr_jose_t **jose, const char *typ,
}
else {
+ if (level <= 0) {
+ apr_errprintf(&(*jose)->result, pool, NULL, 0,
+ "Syntax error: too many nested JOSE payloads");
+ return APR_EINVAL;
+ }
+ level--;
+
status = apr_jose_decode(
flags & APR_JOSE_FLAG_DECODE_ALL ?
&(*jose)->jose.jws->payload : jose, typ, bb, cb,
@@ -1005,6 +1012,13 @@ apr_status_t apr_jose_decode_json_jws(apr_jose_t **jose, apr_json_value_t *val,
bb->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(bb, e);
+ if (level <= 0) {
+ apr_errprintf(&(*jose)->result, pool, NULL, 0,
+ "Syntax error: too many nested JOSE payloads");
+ return APR_EINVAL;
+ }
+ level--;
+
status = apr_jose_decode(
flags & APR_JOSE_FLAG_DECODE_ALL ?
&(*jose)->jose.jwe->payload : jose, typ,
@@ -1144,6 +1158,13 @@ apr_status_t apr_jose_decode_json_jws(apr_jose_t **jose, apr_json_value_t *val,
bb->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(bb, e);
+ if (level <= 0) {
+ apr_errprintf(&(*jose)->result, pool, NULL, 0,
+ "Syntax error: too many nested JOSE payloads");
+ return APR_EINVAL;
+ }
+ level--;
+
return apr_jose_decode(
flags & APR_JOSE_FLAG_DECODE_ALL ?
&(*jose)->jose.jws->payload : jose, typ, bb, cb,
@@ -1442,6 +1463,13 @@ apr_status_t apr_jose_decode_json_jwe(apr_jose_t **jose, apr_json_value_t *val,
if (decrypt == 1) {
+ if (level <= 0) {
+ apr_errprintf(&(*jose)->result, pool, NULL, 0,
+ "Syntax error: too many nested JOSE payloads");
+ return APR_EINVAL;
+ }
+ level--;
+
status = apr_jose_decode(
flags & APR_JOSE_FLAG_DECODE_ALL ?
&(*jose)->jose.jwe->payload : jose, typ,
@@ -1518,6 +1546,13 @@ apr_status_t apr_jose_decode_json_jwe(apr_jose_t **jose, apr_json_value_t *val,
if (APR_SUCCESS == status) {
+ if (level <= 0) {
+ apr_errprintf(&(*jose)->result, pool, NULL, 0,
+ "Syntax error: too many nested JOSE payloads");
+ return APR_EINVAL;
+ }
+ level--;
+
return apr_jose_decode(
flags & APR_JOSE_FLAG_DECODE_ALL ?
&(*jose)->jose.jwe->payload : jose, typ, bb,