[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