On 18-01-19 16:40, Ian Lance Taylor wrote: > int > backtrace_get_view (struct backtrace_state *state ATTRIBUTE_UNUSED, > - int descriptor, off_t offset, size_t size, > + int descriptor, off_t offset, uint64_t size, > backtrace_error_callback error_callback, > void *data, struct backtrace_view *view) > { > @@ -60,6 +60,12 @@ backtrace_get_view (struct backtrace_sta > off_t pageoff; > void *map; > > + if ((uint64_t) (size_t) size != size) > + { > + error_callback (data, "file size too large", 0); > + return 0; > + } > +
Agreed, this will fix the PR. There's a cornercase I'm not sure is worth bothering about, but given that this is an RFC: in the case of 32-bit systems with 32-bit filesystem, there will be a range of numbers that fit in size_t, but are too large for off_t (both 32-bit but size_t unsigned and off_t signed), so in that case, the file size is too large, but we're not detecting that here. Though I think that should be handled in the subsequent mmap (or, in the case of read.c, in the subsequent read(), though I'm guessing the earlier backtrace_alloc > 2GB will already fail). Thanks, - Tom