int WPACKET_init_len(WPACKET *pkt, BUF_MEM *buf, size_t lenbytes) { unsigned char *lenchars; /* Internal API, so should not fail */ assert(buf != NULL); if (buf == NULL) return 0; pkt->buf = buf; pkt->curr = 0; pkt->written = 0; pkt->maxsize = maxmaxsize(lenbytes); pkt->subs = OPENSSL_zalloc(sizeof(*pkt->subs)); if (pkt->subs == NULL) return 0; if (lenbytes == 0) return 1; pkt->subs->pwritten = lenbytes; pkt->subs->lenbytes = lenbytes; if (!WPACKET_allocate_bytes(pkt, lenbytes, &lenchars)) { OPENSSL_free(pkt->subs); pkt->subs = NULL; return 0; } pkt->subs->packet_len = lenchars - (unsigned char *)pkt->buf->data; return 1; }
int WPACKET_set_max_size(WPACKET *pkt, size_t maxsize) { WPACKET_SUB *sub; size_t lenbytes; /* Internal API, so should not fail */ assert(pkt->subs != NULL); if (pkt->subs == NULL) return 0; /* Find the WPACKET_SUB for the top level */ for (sub = pkt->subs; sub->parent != NULL; sub = sub->parent) continue; lenbytes = sub->lenbytes; if (lenbytes == 0) lenbytes = sizeof(pkt->maxsize); if (maxmaxsize(lenbytes) < maxsize || maxsize < pkt->written) return 0; pkt->maxsize = maxsize; return 1; }
int WPACKET_init_len(WPACKET *pkt, BUF_MEM *buf, size_t lenbytes) { /* Internal API, so should not fail */ if (!ossl_assert(buf != NULL)) return 0; pkt->staticbuf = NULL; pkt->buf = buf; pkt->maxsize = maxmaxsize(lenbytes); return wpacket_intern_init_len(pkt, lenbytes); }
int WPACKET_init_static_len(WPACKET *pkt, unsigned char *buf, size_t len, size_t lenbytes) { size_t max = maxmaxsize(lenbytes); /* Internal API, so should not fail */ if (!ossl_assert(buf != NULL && len > 0)) return 0; pkt->staticbuf = buf; pkt->buf = NULL; pkt->maxsize = (max < len) ? max : len; return wpacket_intern_init_len(pkt, lenbytes); }