You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-10 13:00:37 +00:00
Make FileAccess and DirAccess classes reference counted.
This commit is contained in:
@@ -55,14 +55,13 @@ Error CryptoKeyMbedTLS::load(String p_path, bool p_public_only) {
|
||||
ERR_FAIL_COND_V_MSG(locks, ERR_ALREADY_IN_USE, "Key is in use");
|
||||
|
||||
PackedByteArray out;
|
||||
FileAccess *f = FileAccess::open(p_path, FileAccess::READ);
|
||||
ERR_FAIL_COND_V_MSG(!f, ERR_INVALID_PARAMETER, "Cannot open CryptoKeyMbedTLS file '" + p_path + "'.");
|
||||
Ref<FileAccess> f = FileAccess::open(p_path, FileAccess::READ);
|
||||
ERR_FAIL_COND_V_MSG(f.is_null(), ERR_INVALID_PARAMETER, "Cannot open CryptoKeyMbedTLS file '" + p_path + "'.");
|
||||
|
||||
uint64_t flen = f->get_length();
|
||||
out.resize(flen + 1);
|
||||
f->get_buffer(out.ptrw(), flen);
|
||||
out.write[flen] = 0; // string terminator
|
||||
memdelete(f);
|
||||
|
||||
int ret = 0;
|
||||
if (p_public_only) {
|
||||
@@ -79,8 +78,8 @@ Error CryptoKeyMbedTLS::load(String p_path, bool p_public_only) {
|
||||
}
|
||||
|
||||
Error CryptoKeyMbedTLS::save(String p_path, bool p_public_only) {
|
||||
FileAccess *f = FileAccess::open(p_path, FileAccess::WRITE);
|
||||
ERR_FAIL_COND_V_MSG(!f, ERR_INVALID_PARAMETER, "Cannot save CryptoKeyMbedTLS file '" + p_path + "'.");
|
||||
Ref<FileAccess> f = FileAccess::open(p_path, FileAccess::WRITE);
|
||||
ERR_FAIL_COND_V_MSG(f.is_null(), ERR_INVALID_PARAMETER, "Cannot save CryptoKeyMbedTLS file '" + p_path + "'.");
|
||||
|
||||
unsigned char w[16000];
|
||||
memset(w, 0, sizeof(w));
|
||||
@@ -92,14 +91,12 @@ Error CryptoKeyMbedTLS::save(String p_path, bool p_public_only) {
|
||||
ret = mbedtls_pk_write_key_pem(&pkey, w, sizeof(w));
|
||||
}
|
||||
if (ret != 0) {
|
||||
memdelete(f);
|
||||
mbedtls_platform_zeroize(w, sizeof(w)); // Zeroize anything we might have written.
|
||||
ERR_FAIL_V_MSG(FAILED, "Error writing key '" + itos(ret) + "'.");
|
||||
}
|
||||
|
||||
size_t len = strlen((char *)w);
|
||||
f->store_buffer(w, len);
|
||||
memdelete(f);
|
||||
mbedtls_platform_zeroize(w, sizeof(w)); // Zeroize temporary buffer.
|
||||
return OK;
|
||||
}
|
||||
@@ -143,14 +140,13 @@ Error X509CertificateMbedTLS::load(String p_path) {
|
||||
ERR_FAIL_COND_V_MSG(locks, ERR_ALREADY_IN_USE, "Certificate is in use");
|
||||
|
||||
PackedByteArray out;
|
||||
FileAccess *f = FileAccess::open(p_path, FileAccess::READ);
|
||||
ERR_FAIL_COND_V_MSG(!f, ERR_INVALID_PARAMETER, "Cannot open X509CertificateMbedTLS file '" + p_path + "'.");
|
||||
Ref<FileAccess> f = FileAccess::open(p_path, FileAccess::READ);
|
||||
ERR_FAIL_COND_V_MSG(f.is_null(), ERR_INVALID_PARAMETER, "Cannot open X509CertificateMbedTLS file '" + p_path + "'.");
|
||||
|
||||
uint64_t flen = f->get_length();
|
||||
out.resize(flen + 1);
|
||||
f->get_buffer(out.ptrw(), flen);
|
||||
out.write[flen] = 0; // string terminator
|
||||
memdelete(f);
|
||||
|
||||
int ret = mbedtls_x509_crt_parse(&cert, out.ptr(), out.size());
|
||||
ERR_FAIL_COND_V_MSG(ret, FAILED, "Error parsing some certificates: " + itos(ret));
|
||||
@@ -167,8 +163,8 @@ Error X509CertificateMbedTLS::load_from_memory(const uint8_t *p_buffer, int p_le
|
||||
}
|
||||
|
||||
Error X509CertificateMbedTLS::save(String p_path) {
|
||||
FileAccess *f = FileAccess::open(p_path, FileAccess::WRITE);
|
||||
ERR_FAIL_COND_V_MSG(!f, ERR_INVALID_PARAMETER, "Cannot save X509CertificateMbedTLS file '" + p_path + "'.");
|
||||
Ref<FileAccess> f = FileAccess::open(p_path, FileAccess::WRITE);
|
||||
ERR_FAIL_COND_V_MSG(f.is_null(), ERR_INVALID_PARAMETER, "Cannot save X509CertificateMbedTLS file '" + p_path + "'.");
|
||||
|
||||
mbedtls_x509_crt *crt = &cert;
|
||||
while (crt) {
|
||||
@@ -176,14 +172,12 @@ Error X509CertificateMbedTLS::save(String p_path) {
|
||||
size_t wrote = 0;
|
||||
int ret = mbedtls_pem_write_buffer(PEM_BEGIN_CRT, PEM_END_CRT, cert.raw.p, cert.raw.len, w, sizeof(w), &wrote);
|
||||
if (ret != 0 || wrote == 0) {
|
||||
memdelete(f);
|
||||
ERR_FAIL_V_MSG(FAILED, "Error writing certificate '" + itos(ret) + "'.");
|
||||
}
|
||||
|
||||
f->store_buffer(w, wrote - 1); // don't write the string terminator
|
||||
crt = crt->next;
|
||||
}
|
||||
memdelete(f);
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user