fs: fix out of bounds access when parsing directory paths

This commit is contained in:
Michael Scire 2022-03-23 13:38:34 -07:00
parent 596a0f2551
commit 6f54ab5716
2 changed files with 5 additions and 6 deletions

View file

@ -101,10 +101,9 @@ namespace ams::fs {
s32 i;
for (i = m_position; m_buffer[i] != StringTraits::DirectorySeparator; ++i) {
if (m_buffer[i] == StringTraits::NullTerminator) {
if (i == m_position) {
m_position = -1;
return nullptr;
}
char * const ret = (i != m_position) ? m_buffer + m_position : nullptr;
m_position = -1;
return ret;
}
}

View file

@ -41,8 +41,8 @@ namespace ams::fssystem {
private:
Result ResolveFullPath(fs::Path *out, const fs::Path &path) {
if (path.IsMatchHead(m_before_dir.GetString(), m_before_dir.GetLength())) {
R_TRY(out->InitializeWithFormat("%s%s", m_after_dir.GetString(), path.GetString() + m_before_dir.GetLength()));
R_TRY(out->Normalize(fs::PathFlags{}));
R_TRY(out->Initialize(m_after_dir));
R_TRY(out->AppendChild(path));
} else {
R_TRY(out->Initialize(path));
}