don't save files in a file version lower than what was read, closes #791
This commit is contained in:
@@ -376,12 +376,15 @@ namespace KeePassLib.Serialization
|
|||||||
// See also KeePassKdb2x3.Export (KDBX 3.1 export module)
|
// See also KeePassKdb2x3.Export (KDBX 3.1 export module)
|
||||||
uint minVersionForKeys = m_pwDatabase.MasterKey.UserKeys.Select(key => key.GetMinKdbxVersion()).Max();
|
uint minVersionForKeys = m_pwDatabase.MasterKey.UserKeys.Select(key => key.GetMinKdbxVersion()).Max();
|
||||||
|
|
||||||
|
uint minRequiredVersion = Math.Max(minVersionForKeys, m_uFileVersion); //don't save a version lower than what we read
|
||||||
|
|
||||||
|
|
||||||
AesKdf kdfAes = new AesKdf();
|
AesKdf kdfAes = new AesKdf();
|
||||||
if(!kdfAes.Uuid.Equals(m_pwDatabase.KdfParameters.KdfUuid))
|
if(!kdfAes.Uuid.Equals(m_pwDatabase.KdfParameters.KdfUuid))
|
||||||
return Math.Max(FileVersion32, minVersionForKeys);
|
return Math.Max(FileVersion32, minRequiredVersion);
|
||||||
|
|
||||||
if(m_pwDatabase.PublicCustomData.Count > 0)
|
if(m_pwDatabase.PublicCustomData.Count > 0)
|
||||||
return Math.Max(FileVersion32, minVersionForKeys);
|
return Math.Max(FileVersion32, minRequiredVersion);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -401,9 +404,9 @@ namespace KeePassLib.Serialization
|
|||||||
gh(m_pwDatabase.RootGroup);
|
gh(m_pwDatabase.RootGroup);
|
||||||
m_pwDatabase.RootGroup.TraverseTree(TraversalMethod.PreOrder, gh, eh);
|
m_pwDatabase.RootGroup.TraverseTree(TraversalMethod.PreOrder, gh, eh);
|
||||||
if(bCustomData)
|
if(bCustomData)
|
||||||
return Math.Max(FileVersion32, minVersionForKeys);
|
return Math.Max(FileVersion32, minRequiredVersion);
|
||||||
|
|
||||||
return Math.Max(FileVersion32_3, minVersionForKeys); ; // KDBX 3.1 is sufficient
|
return Math.Max(FileVersion32_3, minRequiredVersion); ; // KDBX 3.1 is sufficient
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ComputeKeys(out byte[] pbCipherKey, int cbCipherKey,
|
private void ComputeKeys(out byte[] pbCipherKey, int cbCipherKey,
|
||||||
|
|||||||
Reference in New Issue
Block a user