Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This is often referred to as structure padding. Structure members are arranged in memory as they are declared in the program text. Padding is may be added to the structure to ensure the structure is properly aligned in memory.

...

Code Block
struct buffer {
    size_t size;
    char buffer[50];
};

...

void func(struct buffer *buf) {

  struct buffer *buf_cpy = malloc((sizeof(size_t)+(sizeof(char)*50)));
  if (buf_cpy == NULL) {
    /* Handle malloc() error */
  }

  ...

  memcpy(buf_cpy, buf, sizeof(struct buffer)); /* May result in a small buffer overflow */
}

Compliant Solution

Structure padding should be accounted for when working with structures.

Code Block

struct buffer {
    size_t size;
    char buffer[50];
};

...

void func(struct buffer *buf) {

  struct buffer *buf_cpy = malloc((sizeof(struct buffer));
  if (buf_cpy == NULL) {
    /* Handle malloc() error */
  }

  ...

  memcpy(buf_cpy, buf, sizeof(struct buffer));
}