@@ -862,25 +862,26 @@ bool rm_recursive(const char* const path) {
862
862
return rv == 0 ;
863
863
}
864
864
865
- void build_mount_point (char * mount_dir , const char * const argv0 , char const * const temp_base , const size_t templen ) {
865
+ void build_mount_point (char * mount_dir , const char * const argv0 , const char * const temp_base , const size_t templen ) {
866
866
const size_t maxnamelen = 6 ;
867
+ const size_t prefix_len = 8 ; // Length of "/.mount_"
868
+ const size_t suffix_len = 6 ; // Length of "XXXXXX"
869
+
870
+ // Create a modifiable copy of argv0
871
+ char argv0_copy [PATH_MAX ]; // Ensure this is large enough for your use case
872
+ strncpy (argv0_copy , argv0 , sizeof (argv0_copy ) - 1 );
873
+ argv0_copy [sizeof (argv0_copy ) - 1 ] = '\0' ; // Ensure null termination
867
874
868
- // need to copy argv0 as it's a const value, basename intends to modify it
869
- char * argv0_copy = strdup (argv0 );
870
875
char * path_basename = basename (argv0_copy );
871
- free (argv0_copy );
872
876
873
877
size_t namelen = strlen (path_basename );
874
- // limit length of tempdir name
878
+ // Limit length of tempdir name
875
879
if (namelen > maxnamelen ) {
876
880
namelen = maxnamelen ;
877
881
}
878
882
879
- strcpy (mount_dir , temp_base );
880
- strncpy (mount_dir + templen , "/.mount_" , 8 );
881
- strncpy (mount_dir + templen + 8 , path_basename , namelen );
882
- strncpy (mount_dir + templen + 8 + namelen , "XXXXXX" , 6 );
883
- mount_dir [templen + 8 + namelen + 6 ] = 0 ; // null terminate destination
883
+ // Ensure mount_dir is large enough before copying
884
+ snprintf (mount_dir , templen + prefix_len + namelen + suffix_len + 1 , "%s/.mount_%.*sXXXXXX" , temp_base , (int )namelen , path_basename );
884
885
}
885
886
886
887
int fusefs_main (int argc , char * argv [], void (* mounted )(void )) {
0 commit comments