Check path length on adding them to the cache and log error if a path is too long.

This commit is contained in:
Ottermandias 2022-08-15 13:15:26 +02:00
parent 09417bd6c1
commit 5b5a1e2fd8
5 changed files with 10 additions and 5 deletions

View file

@ -35,7 +35,7 @@ public static unsafe partial class ByteStringFunctions
var path = ( byte* )Marshal.AllocHGlobal( length + 1 );
fixed( char* ptr = s )
{
Encoding.UTF8.GetBytes( ptr, length, path, length + 1 );
Encoding.UTF8.GetBytes( ptr, s.Length, path, length + 1 );
}
path[ length ] = 0;

View file

@ -36,7 +36,7 @@ public readonly struct Utf8RelPath : IEquatable< Utf8RelPath >, IComparable< Utf
return true;
}
var substring = s!.Replace( '/', '\\' ).TrimStart('\\');
var substring = s.Replace( '/', '\\' ).TrimStart('\\');
if( substring.Length > MaxRelPathLength )
{
return false;

View file

@ -87,7 +87,7 @@ public partial class ModCollection
return true;
}
PluginLog.Error( $"Could not add the redirection {path} to {fullPath}, the redirected path is too long." );
PluginLog.Error( $"The redirected path is too long to add the redirection\n\t{path}\n\t--> {fullPath}" );
return false;
}

View file

@ -326,8 +326,10 @@ public partial class ModCollection
// Inside the same mod, conflicts are not recorded.
private void AddFile( Utf8GamePath path, FullPath file, IMod mod )
{
if (!CheckFullPath( path, file ))
if( !CheckFullPath( path, file ) )
{
return;
}
if( ResolvedFiles.TryAdd( path, new ModPath( mod, file ) ) )
{

View file

@ -319,7 +319,10 @@ public partial class ModEditWindow
if( ImGuiUtil.DrawDisabledButton( "Apply Changes", Vector2.Zero, tt, !changes ) )
{
var failedFiles = _editor!.ApplyFiles();
PluginLog.Information( $"Failed to apply {failedFiles} file redirections to {_editor.CurrentOption.Name}." );
if( failedFiles > 0 )
{
PluginLog.Information( $"Failed to apply {failedFiles} file redirections to {_editor.CurrentOption.FullName}." );
}
}