@@ -1289,7 +1289,7 @@ int ltfs_split_symlink(struct ltfs_volume *vol)
12891289 size_t i , size ;
12901290 struct dentry * d , * workd ;
12911291 int ret = 0 ;
1292- char * name , * lfdir , * path , * tok , * next_tok ;
1292+ char * name , * lfdir , * path , * new_path , * tok , * next_tok ;
12931293 bool basedir = true, use_iosche = false;
12941294 char value [32 ];
12951295 ltfs_file_id id ;
@@ -1298,6 +1298,11 @@ int ltfs_split_symlink(struct ltfs_volume *vol)
12981298
12991299 /* check lost_and_found directory and make if it doesn't exist */
13001300 int pathsize = asprintf ( & lfdir , "/%s" , LTFS_LOSTANDFOUND_DIR );
1301+ if (pathsize < 0 ) {
1302+ ltfsmsg (LTFS_ERR , 10001E , "_ltfs_recover_symlink: lfdir" );
1303+ return - LTFS_NO_MEMORY ;
1304+ }
1305+
13011306 ret = fs_path_lookup (lfdir , 0 , & workd , vol -> index );
13021307 if ( ret == - LTFS_NO_DENTRY ) {
13031308 ret = ltfs_fsops_create ( lfdir , true, false, false, & workd , vol );
@@ -1313,6 +1318,11 @@ int ltfs_split_symlink(struct ltfs_volume *vol)
13131318 }
13141319 ret = ltfs_fsops_close ( workd , true, true, use_iosche , vol );
13151320 path = arch_strdup (lfdir );
1321+ if (!path ) {
1322+ ltfsmsg (LTFS_ERR , 10001E , "_ltfs_recover_symlink: path" );
1323+ free (lfdir );
1324+ return - LTFS_NO_MEMORY ;
1325+ }
13161326
13171327 /* loop for conflicted files */
13181328 for ( i = 0 ; i < (vol -> index -> symerr_count ); i ++ ){
@@ -1327,7 +1337,14 @@ int ltfs_split_symlink(struct ltfs_volume *vol)
13271337
13281338 /* check directory path and make if it doesn't exist */
13291339 while ( next_tok ){
1330- asprintf ( & path , "%s/%s" , path , tok );
1340+ ret = asprintf (& new_path , "%s/%s" , path , tok );
1341+ if (ret < 0 ) {
1342+ ltfsmsg (LTFS_ERR , 10001E , "_ltfs_recover_symlink: path" );
1343+ ret = - LTFS_NO_MEMORY ;
1344+ goto err_out_func ;
1345+ }
1346+ free (path );
1347+ path = new_path ;
13311348 if ( basedir ) {
13321349 ret = fs_path_lookup (path , 0 , & workd , vol -> index );
13331350 if ( ret == - LTFS_NO_DENTRY )
@@ -1347,7 +1364,14 @@ int ltfs_split_symlink(struct ltfs_volume *vol)
13471364 next_tok = arch_strtok ( NULL , "/" , contextVal );
13481365 }
13491366 /* Make filename with path in lost_and_found */
1350- asprintf ( & path , "%s/%s" , path , tok );
1367+ ret = asprintf (& new_path , "%s/%s" , path , tok );
1368+ if (ret < 0 ) {
1369+ ltfsmsg (LTFS_ERR , 10001E , "_ltfs_recover_symlink: path" );
1370+ ret = - LTFS_NO_MEMORY ;
1371+ goto err_out_func ;
1372+ }
1373+ free (path );
1374+ path = new_path ;
13511375 ret = fs_path_lookup (path , 0 , & workd , vol -> index );
13521376 if ( ret == 0 ) {
13531377 /* delete same name old symlink */
0 commit comments