*/
static const int min_nodes = 4;
static const int max_nodes = SIZE_MAX / sizeof(void *) < INT_MAX
- ? (int)(SIZE_MAX / sizeof(void *))
- : INT_MAX;
+ ? (int)(SIZE_MAX / sizeof(void *)) : INT_MAX;
struct stack_st {
int num;
OPENSSL_sk_compfunc comp;
};
-OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, OPENSSL_sk_compfunc c)
+OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk,
+ OPENSSL_sk_compfunc c)
{
OPENSSL_sk_compfunc old = sk->comp;
}
/* duplicate |sk->data| content */
- if ((ret->data = OPENSSL_malloc(sizeof(*ret->data) * sk->num_alloc)) == NULL)
+ ret->data = OPENSSL_malloc(sizeof(*ret->data) * sk->num_alloc);
+ if (ret->data == NULL)
goto err;
memcpy(ret->data, sk->data, sizeof(void *) * sk->num);
return ret;
}
OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *sk,
- OPENSSL_sk_copyfunc copy_func,
- OPENSSL_sk_freefunc free_func)
+ OPENSSL_sk_copyfunc copy_func,
+ OPENSSL_sk_freefunc free_func)
{
OPENSSL_STACK *ret;
int i;
int num_alloc;
/* Check to see the reservation isn't exceeding the hard limit */
- if (n > max_nodes - st->num)
+ if (n > max_nodes - st->num) {
+ ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS);
return 0;
+ }
/* Figure out the new size */
num_alloc = st->num + n;
if (num_alloc <= st->num_alloc)
return 1;
num_alloc = compute_growth(num_alloc, st->num_alloc);
- if (num_alloc == 0)
+ if (num_alloc == 0) {
+ ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS);
return 0;
+ }
} else if (num_alloc == st->num_alloc) {
return 1;
}
tmpdata = OPENSSL_realloc((void *)st->data, sizeof(void *) * num_alloc);
- if (tmpdata == NULL)
+ if (tmpdata == NULL) {
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_MALLOC_FAILURE);
return 0;
+ }
st->data = tmpdata;
st->num_alloc = num_alloc;
{
OPENSSL_STACK *st = OPENSSL_zalloc(sizeof(OPENSSL_STACK));
- if (st == NULL)
+ if (st == NULL) {
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_MALLOC_FAILURE);
return NULL;
+ }
st->comp = c;
int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n)
{
- if (st == NULL)
+ if (st == NULL) {
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER);
return 0;
+ }
if (n < 0)
return 1;
int OPENSSL_sk_insert(OPENSSL_STACK *st, const void *data, int loc)
{
- if (st == NULL || st->num == max_nodes)
+ if (st == NULL) {
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER);
return 0;
+ }
+ if (st->num == max_nodes) {
+ ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS);
+ return 0;
+ }
if (!sk_reserve(st, 1, 0))
return 0;
const void *ret = st->data[loc];
if (loc != st->num - 1)
- memmove(&st->data[loc], &st->data[loc + 1],
- sizeof(st->data[0]) * (st->num - loc - 1));
+ memmove(&st->data[loc], &st->data[loc + 1],
+ sizeof(st->data[0]) * (st->num - loc - 1));
st->num--;
return (void *)ret;
void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc)
{
- if (st == NULL || loc < 0 || loc >= st->num)
+ if (st == NULL) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
+ return NULL;
+ }
+ if (loc < 0 || loc >= st->num) {
+ ERR_raise_data(ERR_LIB_X509, ERR_R_PASSED_INVALID_ARGUMENT,
+ "loc=%d", loc);
return NULL;
+ }
return internal_delete(st, loc);
}
void *OPENSSL_sk_shift(OPENSSL_STACK *st)
{
- if (st == NULL || st->num == 0)
+ if (st == NULL) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
return NULL;
+ }
+ if (st->num == 0) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_INVALID_ARGUMENT);
+ return NULL;
+ }
return internal_delete(st, 0);
}
void *OPENSSL_sk_pop(OPENSSL_STACK *st)
{
- if (st == NULL || st->num == 0)
+ if (st == NULL) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
+ return NULL;
+ }
+ if (st->num == 0) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_INVALID_ARGUMENT);
return NULL;
+ }
return internal_delete(st, st->num - 1);
}
void OPENSSL_sk_zero(OPENSSL_STACK *st)
{
- if (st == NULL || st->num == 0)
+ if (st == NULL) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
+ return;
+ }
+ if (st->num == 0)
return;
memset(st->data, 0, sizeof(*st->data) * st->num);
st->num = 0;
void *OPENSSL_sk_value(const OPENSSL_STACK *st, int i)
{
- if (st == NULL || i < 0 || i >= st->num)
+ if (st == NULL) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
+ return NULL;
+ }
+ if (i < 0 || i >= st->num) {
+ ERR_raise_data(ERR_LIB_X509, ERR_R_PASSED_INVALID_ARGUMENT,
+ "i=%d", i);
return NULL;
+ }
return (void *)st->data[i];
}
void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data)
{
- if (st == NULL || i < 0 || i >= st->num)
+ if (st == NULL) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
return NULL;
+ }
+ if (i < 0 || i >= st->num) {
+ ERR_raise_data(ERR_LIB_X509, ERR_R_PASSED_INVALID_ARGUMENT,
+ "i=%d", i);
+ return NULL;
+ }
st->data[i] = data;
st->sorted = 0;
return (void *)st->data[i];
unsigned int seq, offset, len, epoch;
BIO_clear_retry_flags(bio);
- thispkt = sk_MEMPACKET_value(ctx->pkts, 0);
- if (thispkt == NULL || thispkt->num != ctx->currpkt) {
+ if (sk_MEMPACKET_num(ctx->pkts) <= 0
+ || (thispkt = sk_MEMPACKET_value(ctx->pkts, 0)) == NULL
+ || thispkt->num != ctx->currpkt) {
/* Probably run out of data */
BIO_set_retry_read(bio);
return -1;
thispkt->type = type;
}
- for(i = 0; (looppkt = sk_MEMPACKET_value(ctx->pkts, i)) != NULL; i++) {
+ for (i = 0; i < sk_MEMPACKET_num(ctx->pkts); i++) {
+ looppkt = sk_MEMPACKET_value(ctx->pkts, i);
/* Check if we found the right place to insert this packet */
if (looppkt->num > thispkt->num) {
if (sk_MEMPACKET_insert(ctx->pkts, thispkt, i) == 0)
ctx->lastpkt++;
do {
i++;
- nextpkt = sk_MEMPACKET_value(ctx->pkts, i);
- if (nextpkt != NULL && nextpkt->num == ctx->lastpkt)
+ if (i < sk_MEMPACKET_num(ctx->pkts)
+ && (nextpkt = sk_MEMPACKET_value(ctx->pkts, i)) != NULL
+ && nextpkt->num == ctx->lastpkt)
ctx->lastpkt++;
else
return inl;