我试图弄清楚这是否会以某种方式溢出- Bug Bounty – 0x00sec

Updated on 12月 13, 2025 in 漏洞赏金
0 on 6月 30, 2023

希望您度过愉快的一天; 所以我有以下代码,我想知道它是否会在某个时刻溢出::

static void * myalloc(size_t len) {
    void * p = malloc(len);
    if (p == NULL) {
        fprintf(stderr, "end of memory\n");
        exit(1);
    }
    return p;
}

static void * copy_buf(void * buf, uint32_t count, uint32_t be) {
    uint32_t * p = NULL;
    if (buf != NULL) {
        p = myalloc(count * 4);
        memcpy(p, buf, count * 4);
     }  
// more code
  return p;
}

如果它没有溢出,是否会有其他原因导致它这样做,我的意思是如果变量发生变化。或者参数发生了变化(当然不是数据类型,而是它们的值)。

感谢您的帮助,完整的源代码要大得多(超过一个文件,每个文件超过2000 行代码),但这是我关心的部分之一……

祝你今天过得愉快。




1 喜欢

count * 4 可能会溢出,如果 count 小于SIZE_MAX / 4(SIZE_MAX 是最大值 a size_t 可以容纳),因为 memcpy 采取一个 size_t 作为第三个参数,但我不确定这是否会导致任何问题

假设 malloc 来自标准库,没有那个 // more code,我不认为这会溢出,无论值是多少 count

不会溢出……无论大小如何 size_t 或者 uint32_t

我在这里看到两个可能的假设:

  1. buf 由…组成 uint32_ts。
  2. CHAR_BIT 是8。

也许打破其中任何一个都会带来麻烦?

 
  • Liked by
Reply