Use strncpy() instead of strcpy() to copy partition name and type.
This prevents possible buffer overflow, because the source string
occupies up to 33 bytes with a terminating null.

Static analysis tools complain about the code as it is now:
  Function: _generate_raw_part
  Destination buffer too small
  string_overflow: You might overrun the 32 byte destination string
  part_map_entry->type by writing 33 bytes from mac_part_data->system_name
  (Destination buffer too small, line 933)

Cc: Sabas Rosales, Blanca E <[email protected]>
Signed-off-by: Sergei Antonov <[email protected]>
---
 libparted/labels/mac.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c
index 1034418..d8da941 100644
--- a/libparted/labels/mac.c
+++ b/libparted/labels/mac.c
@@ -930,8 +930,8 @@ _generate_raw_part (PedDisk* disk, PedPartition* part,
                = PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num);
        part_map_entry->start_block = PED_CPU_TO_BE32 (part->geom.start);
        part_map_entry->block_count = PED_CPU_TO_BE32 (part->geom.length);
-       strcpy (part_map_entry->name, mac_part_data->volume_name);
-       strcpy (part_map_entry->type, mac_part_data->system_name);
+       strncpy (part_map_entry->name, mac_part_data->volume_name, 32);
+       strncpy (part_map_entry->type, mac_part_data->system_name, 32);
 
        if (mac_part_data->is_driver) {
                mac_part_data->boot_region_length = part->geom.length;
-- 
2.3.0


Reply via email to