mirror of
https://github.com/sudo-project/sudo.git
synced 2025-08-22 01:49:11 +00:00
Make sudo_pow2_roundup() operate on size_t.
This commit is contained in:
parent
b926df1df2
commit
56a431f7ea
@ -262,7 +262,8 @@ sudo_dso_public bool sudo_regex_compile_v1(void *v, const char *pattern, const c
|
||||
|
||||
/* roundup.c */
|
||||
sudo_dso_public unsigned int sudo_pow2_roundup_v1(unsigned int len);
|
||||
#define sudo_pow2_roundup(_a) sudo_pow2_roundup_v1((_a))
|
||||
sudo_dso_public size_t sudo_pow2_roundup_v2(size_t len);
|
||||
#define sudo_pow2_roundup(_a) sudo_pow2_roundup_v2((_a))
|
||||
|
||||
/* secure_path.c */
|
||||
#define SUDO_PATH_SECURE 0
|
||||
|
@ -79,7 +79,7 @@ sudo_lbuf_expand(struct sudo_lbuf *lbuf, unsigned int extra)
|
||||
}
|
||||
|
||||
if (lbuf->len + extra + 1 > lbuf->size) {
|
||||
unsigned int new_size = sudo_pow2_roundup(lbuf->len + extra + 1);
|
||||
size_t new_size = sudo_pow2_roundup(lbuf->len + extra + 1);
|
||||
char *new_buf;
|
||||
|
||||
if (new_size < lbuf->size) {
|
||||
|
@ -30,10 +30,20 @@
|
||||
/*
|
||||
* Round 32-bit unsigned length to the next highest power of two.
|
||||
* Always returns at least 64.
|
||||
* Algorithm from bit twiddling hacks.
|
||||
*/
|
||||
unsigned int
|
||||
sudo_pow2_roundup_v1(unsigned int len)
|
||||
{
|
||||
return (unsigned int)sudo_pow2_roundup_v2((size_t)len);
|
||||
}
|
||||
|
||||
/*
|
||||
* Round a size_t length to the next highest power of two.
|
||||
* Always returns at least 64.
|
||||
* Algorithm from bit twiddling hacks.
|
||||
*/
|
||||
size_t
|
||||
sudo_pow2_roundup_v2(size_t len)
|
||||
{
|
||||
if (len < 64)
|
||||
return 64;
|
||||
@ -43,6 +53,8 @@ sudo_pow2_roundup_v1(unsigned int len)
|
||||
len |= len >> 4;
|
||||
len |= len >> 8;
|
||||
len |= len >> 16;
|
||||
len++;
|
||||
return len;
|
||||
#ifdef __LP64__
|
||||
len |= len >> 32;
|
||||
#endif
|
||||
return ++len;
|
||||
}
|
||||
|
@ -126,6 +126,7 @@ sudo_parse_gids_v1
|
||||
sudo_parseln_v1
|
||||
sudo_parseln_v2
|
||||
sudo_pow2_roundup_v1
|
||||
sudo_pow2_roundup_v2
|
||||
sudo_rcstr_addref
|
||||
sudo_rcstr_alloc
|
||||
sudo_rcstr_delref
|
||||
|
@ -62,9 +62,9 @@ expand_buf(struct connection_buffer *buf, unsigned int needed)
|
||||
|
||||
if (buf->size < needed) {
|
||||
/* Expand buffer. */
|
||||
const unsigned int newsize = sudo_pow2_roundup(needed);
|
||||
const size_t newsize = sudo_pow2_roundup(needed);
|
||||
sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO,
|
||||
"expanding buffer from %u to %u", buf->size, newsize);
|
||||
"expanding buffer from %u to %zu", buf->size, newsize);
|
||||
if (newsize < needed) {
|
||||
/* overflow */
|
||||
errno = ENOMEM;
|
||||
|
@ -302,7 +302,7 @@ get_free_buf(size_t len, struct connection_closure *closure)
|
||||
}
|
||||
|
||||
if (len > buf->size) {
|
||||
const unsigned int new_size = sudo_pow2_roundup(len);
|
||||
const size_t new_size = sudo_pow2_roundup(len);
|
||||
if (new_size < len) {
|
||||
/* overflow */
|
||||
errno = ENOMEM;
|
||||
|
@ -732,7 +732,7 @@ fmt_client_message(struct client_closure *closure, ClientMessage *msg)
|
||||
|
||||
/* Resize buffer as needed. */
|
||||
if (len > buf->size) {
|
||||
const unsigned int new_size = sudo_pow2_roundup(len);
|
||||
const size_t new_size = sudo_pow2_roundup(len);
|
||||
if (new_size < len) {
|
||||
/* overflow */
|
||||
errno = ENOMEM;
|
||||
@ -1639,7 +1639,7 @@ expand_buf(struct connection_buffer *buf, unsigned int needed)
|
||||
|
||||
if (buf->size < needed) {
|
||||
/* Expand buffer. */
|
||||
const unsigned int newsize = sudo_pow2_roundup(needed);
|
||||
const size_t newsize = sudo_pow2_roundup(needed);
|
||||
if (newsize < needed) {
|
||||
/* overflow */
|
||||
errno = ENOMEM;
|
||||
|
Loading…
x
Reference in New Issue
Block a user