[Libreoffice-bugs] [Bug 127648] LO on Linux crashes when accessing opend/locked File on SAMBA network share

bugzilla-daemon at bugs.documentfoundation.org bugzilla-daemon at bugs.documentfoundation.org
Mon Mar 30 10:25:09 UTC 2020


https://bugs.documentfoundation.org/show_bug.cgi?id=127648

--- Comment #32 from Mike Kaganski <mikekaganski at hotmail.com> ---
(In reply to Theofilos Intzoglou from comment #30)
> (In reply to Stephan Bergmann from comment #29)
> > (In reply to Theofilos Intzoglou from comment #27)
> > > int main(void) {
> > >     int fd;
> > >     struct stat statbuf;
> > >     int res;
> > >     char buf[4096];
> > > 
> > >     fd = openat(AT_FDCWD, "/mnt/disk/cv.doc", O_RDONLY);
> > >     if (fd == -1)
> > >         printerr();
> > > 
> > >     res = fstat(fd, &statbuf);
> > >     if (res == -1)
> > >         printerr();
> > >     printf("st_mode=%d\nst_size=%ld\n", statbuf.st_mode, statbuf.st_size);
> > >     res = pread64(fd, &buf, 4096, 0);
> > >     printf("%d\n", res);
> > >     close(fd);
> > >     exit(0);
> > > }
> > 
> > The return type of pread64 is ssize_t, not int.
> 
> Indeed but it gives the same result.

Indeed, because even if you declare your res to be ssize_t, if you print it
using `printf("%d\n", res)`, you convert the ssize_t to int again here, since
"%d" (without "l" length modifier) treats the value as int [1]. The same wrong
handling of integer types seems to be the reason of this problem in the kernel.

[1] https://linux.die.net/man/3/printf

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/libreoffice-bugs/attachments/20200330/4a37ce4d/attachment.htm>


More information about the Libreoffice-bugs mailing list