return ptr;
}
+/* memcpy if len > 0, to avoid passing null pointers (which is undefined). */
+static inline void
+k5memcpy(void *dest, const void *src, size_t len)
+{
+ if (len > 0)
+ memcpy(dest, src, len);
+}
+
+/* memmove if len > 0, to avoid passing null pointers (which is undefined). */
+static inline void
+k5memmove(void *dest, const void *src, size_t len)
+{
+ if (len > 0)
+ memmove(dest, src, len);
+}
+
/* Convert a krb5_timestamp to a time_t value, treating the negative range of
* krb5_timestamp as times between 2038 and 2106 (if time_t is 64-bit). */
static inline time_t
char *s = malloc(b->length+1);
if (s) {
- memcpy(s, b->value, b->length);
+ if (b->length > 0)
+ memcpy(s, b->value, b->length);
s[b->length] = 0;
}
(void) gss_release_buffer(&min_stat, b);
{
if (k5_alloc_pa_data(pa_type, len, out) != 0)
return ENOMEM;
- memcpy((*out)->contents, contents, len);
+ k5memcpy((*out)->contents, contents, len);
return 0;
}
otrans.data = (char *) malloc(otrans.length);
else
otrans.data = 0;
- memcpy(otrans.data,argv[1], otrans.length);
+ k5memcpy(otrans.data,argv[1], otrans.length);
tgs = make_princ(ctx, argv[2], argv[0]);
cl = make_princ(ctx, argv[3], argv[0]);
ret = krb5int_hmac(hash, key, iov, 5, &prf);
if (!ret)
- memcpy(rnd_out->data, prf.data, rnd_out->length);
+ k5memcpy(rnd_out->data, prf.data, rnd_out->length);
zapfree(prf.data, prf.length);
return ret;
}
if (nbytes > remain)
nbytes = remain;
- memcpy(block + bsz - remain, iov->data.data + cursor->in_pos, nbytes);
+ k5memcpy(block + bsz - remain, iov->data.data + cursor->in_pos,
+ nbytes);
cursor->in_pos += nbytes;
remain -= nbytes;
if (nbytes > remain)
nbytes = remain;
- memcpy(iov->data.data + cursor->out_pos, block + bsz - remain, nbytes);
+ k5memcpy(iov->data.data + cursor->out_pos, block + bsz - remain,
+ nbytes);
cursor->out_pos += nbytes;
remain -= nbytes;
/* Concatenate PRF(k, 1||input) || PRF(k, 2||input) || ... to produce the
* desired number of bytes. */
- memcpy(&prf_in.data[1], input->data, input->length);
+ k5memcpy(&prf_in.data[1], input->data, input->length);
for (i = 0; i < nblocks; i++) {
prf_in.data[0] = i + 1;
ret = krb5_c_prf(context, k, &prf_in, &prf_out);
if (t.data == NULL)
goto cleanup;
- memcpy(ns.data + 4, prf_in->value, prf_in->length);
+ k5memcpy(ns.data + 4, prf_in->value, prf_in->length);
i = 0;
p = (unsigned char *)prf_out->value;
while (desired_output_len > 0) {
static inline void
insert_bytes(asn1buf *buf, const void *bytes, size_t len)
{
- if (buf->ptr != NULL && len > 0) {
- memcpy(buf->ptr - len, bytes, len);
+ if (buf->ptr != NULL) {
+ k5memcpy(buf->ptr - len, bytes, len);
buf->ptr -= len;
}
buf->count += len;
krb5_ser_pack_bytes(krb5_octet *ostring, size_t osize, krb5_octet **bufp, size_t *remainp)
{
if (*remainp >= osize) {
- memcpy(*bufp, ostring, osize);
+ k5memcpy(*bufp, ostring, osize);
*bufp += osize;
*remainp -= osize;
return(0);
return (FALSE);
else
xdrs->x_handy -= len;
- memmove(addr, xdrs->x_private, len);
+ if (len > 0)
+ memmove(addr, xdrs->x_private, len);
xdrs->x_private = (char *)xdrs->x_private + len;
return (TRUE);
}
return (FALSE);
else
xdrs->x_handy -= len;
- memmove(xdrs->x_private, addr, len);
+ if (len > 0)
+ memmove(xdrs->x_private, addr, len);
xdrs->x_private = (char *)xdrs->x_private + len;
return (TRUE);
}
p += sizeof(u_int32_t); \
*(u_char *)p = flags; \
p += sizeof(u_char); \
- memmove(p, key->data, key->size); \
+ if (key->size > 0) \
+ memmove(p, key->data, key->size); \
p += key->size; \
- memmove(p, data->data, data->size); \
+ if (data->size > 0) \
+ memmove(p, data->data, data->size); \
}
/* For the recno leaf pages, the item is a data entry. */
tl_data->tl_data_type = new_tl_data->tl_data_type;
tl_data->tl_data_length = new_tl_data->tl_data_length;
tl_data->tl_data_contents = tmp;
- memcpy(tmp, new_tl_data->tl_data_contents, tl_data->tl_data_length);
+ k5memcpy(tmp, new_tl_data->tl_data_contents, tl_data->tl_data_length);
return(0);
}
}
STORE16_INT((*out)->bv_val, in->tl_data_type);
- memcpy ((*out)->bv_val + 2, in->tl_data_contents, in->tl_data_length);
+ k5memcpy((*out)->bv_val + 2, in->tl_data_contents, in->tl_data_length);
return 0;
}
}
/* Process the last 0-7 bytes followed by the length mod 256. */
- memcpy(last, end, len % 8);
+ if (len % 8 > 0)
+ memcpy(last, end, len % 8);
last[7] = len & 0xFF;
mi = load_64_le(last);
v3 ^= mi;