[BUILDFIX] Replace empty arrays in zero_rtt structs with local var ptrs (#66)

This commit is contained in:
Stephen Petrides 2019-02-04 11:17:42 -05:00 committed by LiteSpeed Tech
parent 8ca33e0e19
commit 2b051cfe62
2 changed files with 24 additions and 27 deletions

View file

@ -261,8 +261,8 @@ lsquic_enc_session_serialize_zero_rtt(struct lsquic_zero_rtt_storage *storage,
const c_cert_item_t *cert_item) const c_cert_item_t *cert_item)
{ {
uint32_t i; uint32_t i;
uint8_t *next_cert; uint32_t *cert_len;
struct lsquic_cert_storage *cert_storage; uint8_t *cert_data;
/* /*
* assign versions * assign versions
*/ */
@ -288,20 +288,20 @@ lsquic_enc_session_serialize_zero_rtt(struct lsquic_zero_rtt_storage *storage,
* certificate chain * certificate chain
*/ */
storage->cert_count = (uint32_t)cert_item->count; storage->cert_count = (uint32_t)cert_item->count;
next_cert = (uint8_t *)&storage->cert_storage; cert_len = (uint32_t *)(storage + 1);
cert_data = (uint8_t *)(cert_len + 1);
for (i = 0; i < storage->cert_count; i++) for (i = 0; i < storage->cert_count; i++)
{ {
cert_storage = (struct lsquic_cert_storage *)next_cert; *cert_len = lsquic_str_len(&cert_item->crts[i]);
cert_storage->len = lsquic_str_len(&cert_item->crts[i]); memcpy(cert_data, lsquic_str_buf(&cert_item->crts[i]), *cert_len);
memcpy(cert_storage->data, lsquic_str_buf(&cert_item->crts[i]), cert_len = (uint32_t *)(cert_data + *cert_len);
cert_storage->len); cert_data = (uint8_t *)(cert_len + 1);
next_cert += sizeof(struct lsquic_cert_storage) + cert_storage->len;
} }
} }
#define CHECK_SPACE(need, start, end) \ #define CHECK_SPACE(need, start, end) \
do { if ((intptr_t) (need) > ( (intptr_t) (end) - (intptr_t) (start))) \ do { if ((intptr_t) (need) > ((intptr_t) (end) - (intptr_t) (start))) \
{ return RTT_DESERIALIZE_BAD_CERT_SIZE; } \ { return RTT_DESERIALIZE_BAD_CERT_SIZE; } \
} while (0) \ } while (0) \
@ -315,8 +315,8 @@ lsquic_enc_session_deserialize_zero_rtt(
{ {
uint32_t i, len; uint32_t i, len;
uint64_t hash; uint64_t hash;
uint8_t *next_cert; uint32_t *cert_len;
struct lsquic_cert_storage *cert_storage; uint8_t *cert_data;
void *storage_end = (uint8_t *)storage + storage_size; void *storage_end = (uint8_t *)storage + storage_size;
/* /*
* check versions * check versions
@ -345,19 +345,19 @@ lsquic_enc_session_deserialize_zero_rtt(
cert_item->count = storage->cert_count; cert_item->count = storage->cert_count;
cert_item->crts = malloc(cert_item->count * sizeof(lsquic_str_t)); cert_item->crts = malloc(cert_item->count * sizeof(lsquic_str_t));
cert_item->hashs = lsquic_str_new(NULL, 0); cert_item->hashs = lsquic_str_new(NULL, 0);
next_cert = (uint8_t *)storage->cert_storage; cert_len = (uint32_t *)(storage + 1);
for (i = 0; i < storage->cert_count; i++) for (i = 0; i < storage->cert_count; i++)
{ {
CHECK_SPACE(sizeof(struct lsquic_cert_storage), next_cert, storage_end); CHECK_SPACE(sizeof(uint32_t), cert_len, storage_end);
cert_storage = (struct lsquic_cert_storage *)next_cert; cert_data = (uint8_t *)(cert_len + 1);
memcpy(&len, cert_storage, sizeof(len)); memcpy(&len, cert_len, sizeof(len));
CHECK_SPACE(len, cert_storage->data, storage_end); CHECK_SPACE(len, cert_data, storage_end);
lsquic_str_prealloc(&cert_item->crts[i], len); lsquic_str_prealloc(&cert_item->crts[i], len);
lsquic_str_setlen(&cert_item->crts[i], len); lsquic_str_setlen(&cert_item->crts[i], len);
memcpy(lsquic_str_buf(&cert_item->crts[i]), cert_storage->data, len); memcpy(lsquic_str_buf(&cert_item->crts[i]), cert_data, len);
hash = fnv1a_64((const uint8_t *)cert_storage->data, len); hash = fnv1a_64((const uint8_t *)cert_data, len);
lsquic_str_append(cert_item->hashs, (char *)&hash, 8); lsquic_str_append(cert_item->hashs, (char *)&hash, 8);
next_cert += sizeof(struct lsquic_cert_storage) + len; cert_len = (uint32_t *)(cert_data + len);
} }
return RTT_DESERIALIZE_OK; return RTT_DESERIALIZE_OK;
} }
@ -1915,7 +1915,7 @@ lsquic_enc_session_get_zero_rtt (lsquic_enc_session_t *enc_session,
} }
for (i = 0; i < enc_session->cert_item->count; ++i) for (i = 0; i < enc_session->cert_item->count; ++i)
{ {
sz += sizeof(struct lsquic_cert_storage); sz += sizeof(uint32_t);
sz += lsquic_str_len(&enc_session->cert_item->crts[i]); sz += lsquic_str_len(&enc_session->cert_item->crts[i]);
} }
sz += sizeof(struct lsquic_zero_rtt_storage); sz += sizeof(struct lsquic_zero_rtt_storage);

View file

@ -65,12 +65,6 @@ typedef struct lsquic_session_cache_info_st
} lsquic_session_cache_info_t; } lsquic_session_cache_info_t;
struct lsquic_cert_storage
{
uint32_t len;
uint8_t data[0];
};
struct lsquic_zero_rtt_storage struct lsquic_zero_rtt_storage
{ {
uint32_t quic_version_tag; uint32_t quic_version_tag;
@ -89,7 +83,10 @@ struct lsquic_zero_rtt_storage
uint8_t sscid[SCID_LENGTH]; uint8_t sscid[SCID_LENGTH];
uint8_t spubs[MAX_SPUBS_LENGTH]; uint8_t spubs[MAX_SPUBS_LENGTH];
uint32_t cert_count; uint32_t cert_count;
struct lsquic_cert_storage cert_storage[0]; /*
* uint32_t cert_len;
* uint8_t cert_data[0];
*/
}; };
#ifndef LSQUIC_KEEP_ENC_SESS_HISTORY #ifndef LSQUIC_KEEP_ENC_SESS_HISTORY