@@ -1344,7 +1344,7 @@ static acl_pack_kind add_directory(const char *out_file, FILE *of,
1344
1344
#ifdef _WIN32
1345
1345
#define FULL_NAME_LENGTH (2 * MAX_PATH)
1346
1346
char full_name [FULL_NAME_LENGTH ];
1347
- if (FULL_NAME_LENGTH < name_length ) {
1347
+ if (FULL_NAME_LENGTH <= name_length ) {
1348
1348
fprintf (stderr , "acl_pkg_pack: Failed to write to %s: %s\n" , out_file ,
1349
1349
"Directory name too long" );
1350
1350
return PACK_END ;
@@ -1388,7 +1388,7 @@ static acl_pack_kind add_directory(const char *out_file, FILE *of,
1388
1388
struct dirent * entry ;
1389
1389
#define FULL_NAME_LENGTH (2 * PATH_MAX)
1390
1390
char full_name [FULL_NAME_LENGTH ];
1391
- if (FULL_NAME_LENGTH < name_length ) {
1391
+ if (FULL_NAME_LENGTH <= name_length ) {
1392
1392
fprintf (stderr , "acl_pkg_pack: Failed to write to %s: %s\n" , out_file ,
1393
1393
"Directory name too long" );
1394
1394
return PACK_END ;
@@ -1641,11 +1641,12 @@ static int acl_pkg_unpack_buffer_or_file(const char *buffer, size_t buffer_size,
1641
1641
}
1642
1642
1643
1643
// Generate the full name, truncate or zero pad to avoid buffer overflow
1644
- if (FULL_NAME_LEN < out_dir_length ) {
1644
+ if (FULL_NAME_LEN <= out_dir_length + 1 ) {
1645
1645
fprintf (stderr , "%s: Directory name too long\n" , routine_name );
1646
+ } else {
1647
+ strncpy (full_name + out_dir_length + 1 , name ,
1648
+ FULL_NAME_LEN - out_dir_length - 1 );
1646
1649
}
1647
- strncpy (full_name + out_dir_length + 1 , name ,
1648
- FULL_NAME_LEN - out_dir_length - 1 );
1649
1650
if (full_name [FULL_NAME_LEN - 1 ] != '\0' ) {
1650
1651
full_name [FULL_NAME_LEN - 1 ] = '\0' ;
1651
1652
}
0 commit comments