@@ -124,6 +124,9 @@ int cbor_get_assertion(const uint8_t *data, size_t len, bool next) {
124124 else if (val_u == 0x03 ) { // excludeList
125125 CBOR_PARSE_ARRAY_START (_f1 , 2 )
126126 {
127+ if (allowList_len >= MAX_CREDENTIAL_COUNT_IN_LIST ) {
128+ CBOR_ERROR (CTAP2_ERR_LIMIT_EXCEEDED );
129+ }
127130 PublicKeyCredentialDescriptor * pc = & allowList [allowList_len ];
128131 CBOR_PARSE_MAP_START (_f2 , 3 )
129132 {
@@ -133,6 +136,9 @@ int cbor_get_assertion(const uint8_t *data, size_t len, bool next) {
133136 if (strcmp (_fd3 , "transports" ) == 0 ) {
134137 CBOR_PARSE_ARRAY_START (_f3 , 4 )
135138 {
139+ if (pc -> transports_len >= MAX_TRANSPORT_COUNT ) {
140+ CBOR_ERROR (CTAP2_ERR_LIMIT_EXCEEDED );
141+ }
136142 CBOR_FIELD_GET_TEXT (pc -> transports [pc -> transports_len ], 4 );
137143 pc -> transports_len ++ ;
138144 }
@@ -481,6 +487,9 @@ int cbor_get_assertion(const uint8_t *data, size_t len, bool next) {
481487 }
482488 numberOfCredentialsx = numberOfCredentials ;
483489 datax = (uint8_t * ) calloc (1 , len );
490+ if (datax == NULL ) {
491+ CBOR_ERROR (CTAP1_ERR_OTHER );
492+ }
484493 memcpy (datax , data , len );
485494 lenx = len ;
486495 flagsx = flags ;
@@ -608,6 +617,9 @@ int cbor_get_assertion(const uint8_t *data, size_t len, bool next) {
608617
609618 size_t aut_data_len = 32 + 1 + 4 + ext_len ;
610619 aut_data = (uint8_t * ) calloc (1 , aut_data_len + clientDataHash .len );
620+ if (aut_data == NULL ) {
621+ CBOR_ERROR (CTAP1_ERR_OTHER );
622+ }
611623 uint8_t * pa = aut_data ;
612624 memcpy (pa , rp_id_hash , 32 ); pa += 32 ;
613625 * pa ++ = flags ;
0 commit comments