1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- diff --git a/thirdparty/libbacktrace/read.c b/thirdparty/libbacktrace/read.c
- index 1811c8d2e0..fda8e222d4 100644
- --- a/thirdparty/libbacktrace/read.c
- +++ b/thirdparty/libbacktrace/read.c
- @@ -52,14 +52,9 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
- {
- uint64_t got;
- ssize_t r;
- -
- - if ((uint64_t) (size_t) size != size)
- - {
- - error_callback (data, "file size too large", 0);
- - return 0;
- - }
- -
- - if (lseek (descriptor, offset, SEEK_SET) < 0)
- +/* GODOT start */
- + if (_lseeki64 (descriptor, offset, SEEK_SET) < 0)
- +/* GODOT end */
- {
- error_callback (data, "lseek", errno);
- return 0;
- @@ -74,7 +69,13 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
- got = 0;
- while (got < size)
- {
- - r = read (descriptor, view->base, size - got);
- +/* GODOT start */
- + uint64_t sz = size - got;
- + if (sz > INT_MAX) {
- + sz = INT_MAX;
- + }
- + r = _read (descriptor, view->base, sz);
- +/* GODOT end */
- if (r < 0)
- {
- error_callback (data, "read", errno);
- @@ -84,6 +85,9 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
- if (r == 0)
- break;
- got += (uint64_t) r;
- +/* GODOT start */
- + view->base += r;
- +/* GODOT end */
- }
-
- if (got < size)
|