Merge pull request #46810 from W4RH4WK/file-access-get-buffer-parameter-checks

Add parameter checks to FileAccess get_buffer functions
This commit is contained in:
Rémi Verschelde 2021-03-14 01:11:55 +01:00 committed by GitHub
commit 8051307efe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 26 additions and 3 deletions

View File

@ -286,8 +286,10 @@ uint8_t FileAccessCompressed::get_8() const {
} }
int FileAccessCompressed::get_buffer(uint8_t *p_dst, int p_length) const { int FileAccessCompressed::get_buffer(uint8_t *p_dst, int p_length) const {
ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); ERR_FAIL_COND_V(!p_dst, -1);
ERR_FAIL_COND_V_MSG(writing, 0, "File has not been opened in read mode."); ERR_FAIL_COND_V(p_length < 0, -1);
ERR_FAIL_COND_V_MSG(!f, -1, "File must be opened before use.");
ERR_FAIL_COND_V_MSG(writing, -1, "File has not been opened in read mode.");
if (at_end) { if (at_end) {
read_eof = true; read_eof = true;

View File

@ -237,7 +237,9 @@ uint8_t FileAccessEncrypted::get_8() const {
} }
int FileAccessEncrypted::get_buffer(uint8_t *p_dst, int p_length) const { int FileAccessEncrypted::get_buffer(uint8_t *p_dst, int p_length) const {
ERR_FAIL_COND_V_MSG(writing, 0, "File has not been opened in read mode."); ERR_FAIL_COND_V(!p_dst, -1);
ERR_FAIL_COND_V(p_length < 0, -1);
ERR_FAIL_COND_V_MSG(writing, -1, "File has not been opened in read mode.");
int to_copy = MIN(p_length, data.size() - pos); int to_copy = MIN(p_length, data.size() - pos);
for (int i = 0; i < to_copy; i++) { for (int i = 0; i < to_copy; i++) {

View File

@ -138,6 +138,8 @@ uint8_t FileAccessMemory::get_8() const {
} }
int FileAccessMemory::get_buffer(uint8_t *p_dst, int p_length) const { int FileAccessMemory::get_buffer(uint8_t *p_dst, int p_length) const {
ERR_FAIL_COND_V(!p_dst, -1);
ERR_FAIL_COND_V(p_length < 0, -1);
ERR_FAIL_COND_V(!data, -1); ERR_FAIL_COND_V(!data, -1);
int left = length - pos; int left = length - pos;

View File

@ -366,6 +366,9 @@ void FileAccessNetwork::_queue_page(int p_page) const {
} }
int FileAccessNetwork::get_buffer(uint8_t *p_dst, int p_length) const { int FileAccessNetwork::get_buffer(uint8_t *p_dst, int p_length) const {
ERR_FAIL_COND_V(!p_dst, -1);
ERR_FAIL_COND_V(p_length < 0, -1);
//bool eof=false; //bool eof=false;
if (pos + p_length > total_size) { if (pos + p_length > total_size) {
eof_flag = true; eof_flag = true;

View File

@ -299,6 +299,9 @@ uint8_t FileAccessPack::get_8() const {
} }
int FileAccessPack::get_buffer(uint8_t *p_dst, int p_length) const { int FileAccessPack::get_buffer(uint8_t *p_dst, int p_length) const {
ERR_FAIL_COND_V(!p_dst, -1);
ERR_FAIL_COND_V(p_length < 0, -1);
if (eof) { if (eof) {
return 0; return 0;
} }

View File

@ -303,6 +303,8 @@ uint8_t FileAccessZip::get_8() const {
} }
int FileAccessZip::get_buffer(uint8_t *p_dst, int p_length) const { int FileAccessZip::get_buffer(uint8_t *p_dst, int p_length) const {
ERR_FAIL_COND_V(!p_dst, -1);
ERR_FAIL_COND_V(p_length < 0, -1);
ERR_FAIL_COND_V(!zfile, -1); ERR_FAIL_COND_V(!zfile, -1);
at_eof = unzeof(zfile); at_eof = unzeof(zfile);
if (at_eof) { if (at_eof) {

View File

@ -368,6 +368,8 @@ Vector<String> FileAccess::get_csv_line(const String &p_delim) const {
} }
int FileAccess::get_buffer(uint8_t *p_dst, int p_length) const { int FileAccess::get_buffer(uint8_t *p_dst, int p_length) const {
ERR_FAIL_COND_V(!p_dst, -1);
ERR_FAIL_COND_V(p_length < 0, -1);
int i = 0; int i = 0;
for (i = 0; i < p_length && !eof_reached(); i++) { for (i = 0; i < p_length && !eof_reached(); i++) {
p_dst[i] = get_8(); p_dst[i] = get_8();

View File

@ -240,6 +240,8 @@ uint8_t FileAccessUnix::get_8() const {
} }
int FileAccessUnix::get_buffer(uint8_t *p_dst, int p_length) const { int FileAccessUnix::get_buffer(uint8_t *p_dst, int p_length) const {
ERR_FAIL_COND_V(!p_dst, -1);
ERR_FAIL_COND_V(p_length < 0, -1);
ERR_FAIL_COND_V_MSG(!f, -1, "File must be opened before use."); ERR_FAIL_COND_V_MSG(!f, -1, "File must be opened before use.");
int read = fread(p_dst, 1, p_length, f); int read = fread(p_dst, 1, p_length, f);
check_errors(); check_errors();

View File

@ -253,6 +253,8 @@ uint8_t FileAccessWindows::get_8() const {
} }
int FileAccessWindows::get_buffer(uint8_t *p_dst, int p_length) const { int FileAccessWindows::get_buffer(uint8_t *p_dst, int p_length) const {
ERR_FAIL_COND_V(!p_dst, -1);
ERR_FAIL_COND_V(p_length < 0, -1);
ERR_FAIL_COND_V(!f, -1); ERR_FAIL_COND_V(!f, -1);
if (flags == READ_WRITE || flags == WRITE_READ) { if (flags == READ_WRITE || flags == WRITE_READ) {
if (prev_op == WRITE) { if (prev_op == WRITE) {

View File

@ -114,6 +114,9 @@ uint8_t FileAccessAndroid::get_8() const {
} }
int FileAccessAndroid::get_buffer(uint8_t *p_dst, int p_length) const { int FileAccessAndroid::get_buffer(uint8_t *p_dst, int p_length) const {
ERR_FAIL_COND_V(!p_dst, -1);
ERR_FAIL_COND_V(p_length < 0, -1);
off_t r = AAsset_read(a, p_dst, p_length); off_t r = AAsset_read(a, p_dst, p_length);
if (pos + p_length > len) { if (pos + p_length > len) {