diff --git a/include/lsquic.h b/include/lsquic.h index 6ca426f..3ab1b82 100644 --- a/include/lsquic.h +++ b/include/lsquic.h @@ -1675,7 +1675,8 @@ lsquic_get_h3_alpns (unsigned versions); * been established: it will return incorrect result. */ int -lsquic_is_valid_hs_packet (lsquic_engine_t *, const unsigned char *, size_t); +lsquic_is_valid_hs_packet (lsquic_engine_t *, const unsigned char *, + size_t bufsz, size_t packet_in_sz); /** * Parse cid from packet stored in `buf' and store it to `cid'. Returns 0 diff --git a/src/liblsquic/lsquic_hspack_valid.c b/src/liblsquic/lsquic_hspack_valid.c index a59bfb7..7398d2a 100644 --- a/src/liblsquic/lsquic_hspack_valid.c +++ b/src/liblsquic/lsquic_hspack_valid.c @@ -88,7 +88,7 @@ is_valid_gquic_hs_packet (const unsigned char *buf, size_t bufsz, int lsquic_is_valid_hs_packet (struct lsquic_engine *engine, - const unsigned char *buf, size_t bufsz) + const unsigned char *buf, size_t bufsz, size_t packet_in_sz) { lsquic_ver_tag_t tag; int is_valid; @@ -104,7 +104,7 @@ lsquic_is_valid_hs_packet (struct lsquic_engine *engine, case 0x80|0x00|0x20|0x10|0x08: case 0x80|0x40|0x20|0x10|0x00: case 0x80|0x00|0x20|0x10|0x00: - is_valid = bufsz >= IQUIC_MIN_INIT_PACKET_SZ + is_valid = packet_in_sz >= IQUIC_MIN_INIT_PACKET_SZ && lsquic_is_valid_iquic_hs_packet(buf, bufsz, &tag); break; /* 1X00 XGGG: ID-22 long header */ @@ -122,7 +122,7 @@ lsquic_is_valid_hs_packet (struct lsquic_engine *engine, case 0x80|0x00|0x20|0x00|0x08: case 0x80|0x40|0x20|0x00|0x00: case 0x80|0x00|0x20|0x00|0x00: - is_valid = bufsz >= IQUIC_MIN_INIT_PACKET_SZ + is_valid = packet_in_sz >= IQUIC_MIN_INIT_PACKET_SZ && lsquic_is_valid_ietf_v1_or_Q046plus_hs_packet(buf, bufsz, &tag); break; /* 01XX XGGG: ID-22 short header */