Skip to content

Commit 1bfc104

Browse files
committed
Fix error reporting when opening pack files
1 parent 7d7d479 commit 1bfc104

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

core/io/file_access.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,19 +159,24 @@ Error FileAccess::reopen(const String &p_path, int p_mode_flags) {
159159
Ref<FileAccess> FileAccess::open(const String &p_path, int p_mode_flags, Error *r_error) {
160160
//try packed data first
161161

162+
Error err = OK;
162163
Ref<FileAccess> ret;
163164
if (!(p_mode_flags & WRITE) && !(p_mode_flags & SKIP_PACK) && PackedData::get_singleton() && !PackedData::get_singleton()->is_disabled()) {
164165
ret = PackedData::get_singleton()->try_open_path(p_path);
165166
if (ret.is_valid()) {
167+
err = ret->get_error();
166168
if (r_error) {
167-
*r_error = OK;
169+
*r_error = err;
170+
}
171+
if (err != OK) {
172+
ret.unref();
168173
}
169174
return ret;
170175
}
171176
}
172177

173178
ret = create_for_path(p_path);
174-
Error err = ret->open_internal(p_path, p_mode_flags & ~SKIP_PACK);
179+
err = ret->open_internal(p_path, p_mode_flags & ~SKIP_PACK);
175180

176181
if (r_error) {
177182
*r_error = err;

core/io/file_access_pack.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,11 @@ void FileAccessPack::set_big_endian(bool p_big_endian) {
447447
}
448448

449449
Error FileAccessPack::get_error() const {
450-
if (eof) {
450+
if (encryption_error) {
451+
return encryption_error;
452+
} else if (f.is_null()) {
453+
return ERR_FILE_CANT_OPEN;
454+
} else if (eof) {
451455
return ERR_FILE_EOF;
452456
}
453457
return OK;
@@ -494,8 +498,8 @@ FileAccessPack::FileAccessPack(const String &p_path, const PackedData::PackedFil
494498
key.write[i] = script_encryption_key[i];
495499
}
496500

497-
Error err = fae->open_and_parse(f, key, FileAccessEncrypted::MODE_READ, false);
498-
ERR_FAIL_COND_MSG(err, vformat("Can't open encrypted pack-referenced file '%s'.", String(pf.pack)));
501+
encryption_error = fae->open_and_parse(f, key, FileAccessEncrypted::MODE_READ, false);
502+
ERR_FAIL_COND_MSG(encryption_error, vformat("Can't open encrypted pack-referenced file '%s'.", String(pf.pack)));
499503
f = fae;
500504
off = 0;
501505
}

core/io/file_access_pack.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ class FileAccessPack : public FileAccess {
168168

169169
mutable uint64_t pos;
170170
mutable bool eof;
171+
Error encryption_error = OK;
171172
uint64_t off;
172173

173174
Ref<FileAccess> f;

0 commit comments

Comments
 (0)