1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Fix view->base pointer overwrite.

This commit is contained in:
bruvzg
2025-02-15 22:56:02 +02:00
parent bacab7f822
commit 961207dc6f
2 changed files with 10 additions and 6 deletions

View File

@@ -18,23 +18,26 @@ index 7af66602fd..a7e937667c 100644
{ {
error_callback (data, "lseek", errno); error_callback (data, "lseek", errno);
return 0; return 0;
@@ -74,7 +67,10 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, @@ -72,9 +65,13 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
view->len = size;
got = 0; got = 0;
+ void *ptr = view->base;
while (got < size) while (got < size)
{ {
- r = read (descriptor, view->base, size - got); - r = read (descriptor, view->base, size - got);
+ uint64_t sz = size - got; + uint64_t sz = size - got;
+ if (sz > INT_MAX) + if (sz > INT_MAX)
+ sz = INT_MAX; + sz = INT_MAX;
+ r = _read (descriptor, view->base, sz); + r = _read (descriptor, ptr, sz);
if (r < 0) if (r < 0)
{ {
error_callback (data, "read", errno); error_callback (data, "read", errno);
@@ -84,6 +80,7 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, @@ -84,6 +81,7 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
if (r == 0) if (r == 0)
break; break;
got += (uint64_t) r; got += (uint64_t) r;
+ view->base += r; + ptr += r;
} }
if (got < size) if (got < size)

View File

@@ -65,12 +65,13 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
view->len = size; view->len = size;
got = 0; got = 0;
void *ptr = view->base;
while (got < size) while (got < size)
{ {
uint64_t sz = size - got; uint64_t sz = size - got;
if (sz > INT_MAX) if (sz > INT_MAX)
sz = INT_MAX; sz = INT_MAX;
r = _read (descriptor, view->base, sz); r = _read (descriptor, ptr, sz);
if (r < 0) if (r < 0)
{ {
error_callback (data, "read", errno); error_callback (data, "read", errno);
@@ -80,7 +81,7 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
if (r == 0) if (r == 0)
break; break;
got += (uint64_t) r; got += (uint64_t) r;
view->base += r; ptr += r;
} }
if (got < size) if (got < size)