Subject: bug#75569: 30.0.93; Large /proc/* file are read incompletely

From: Eli Zaretskii <[email-masked]>
Date: Sat, 18 Jan 2025 12:44:30 +0200

> Date: Thu, 16 Jan 2025 12:51:11 -0800
> Cc: [email-masked], [email-masked], [email-masked]
> From: Paul Eggert <[email-masked]>
> 
> On 2025-01-16 00:55, Eli Zaretskii wrote:
> 
> > Then how about
> > 
> >    if ((regular && st.st_size > 0) || (!regular && seekable) || !NILP (end))
> 
> That should work too but I expect we're overthinking it; see bellow.

Juri and Daniel, could you please try the change above?

> > That would exclude non-regular files that are seekable, which would be
> > a regression, I think.
> 
> I expect it's a bugfix not a regression. For such files, end_offset
> is TYPE_MAXIUMUM (off_t), which Emacs will try to create an enormous buffer.

Juri and Daniel, could you also try

  if ((regular && st.st_size > 0) || !NILP (end))  

instead?

> > If the size is non-zero and
> > inaccurate, do we currently support that, e.g., if the file grows
> > while we read it?
> 
> That's the crux of the bug. If we don't support that, the code is 
> unreliable pretty much everywhere, not just in /proc. If we fix that, 
> the /proc problem goes away.
> 
> In other words, when reading a file Emacs should treat st_size as merely 
> a heuristic, not as authoritative.

But does it do that now?  Regular files whose size changes as we read
them are pretty rare, so maybe we almost never bump into them.