Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


On 01/29/2013 01:53 PM, Stephan Bergmann wrote:
On 01/24/2013 10:43 PM, Henrik /KaarPoSoft wrote:
On 01/24/2013 10:09 AM, Stephan Bergmann wrote:
On 01/24/2013 12:33 AM, Henrik /KaarPoSoft wrote:
On 01/23/2013 04:54 PM, Stephan Bergmann wrote:
On 01/23/2013 08:31 AM, Henrik /KaarPoSoft wrote:
Your strace lines like

9579  08:05:59.537424 openat(AT_FDCWD,
"/opt/kaarpux/libreoffice-4.0.0.1/lib/libreoffice/program/../program/r",



O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file
or directory)
9579  08:05:59.537514 open("dkten-US.res", O_RDONLY) = -1 ENOENT (No
such file or directory)
9579  08:05:59.537672
access("/opt/kaarpux/libreoffice-4.0.0.1/lib/libreoffice/program/../progra",




F_OK) = -1 ENOENT (No such file or directory)
9579  08:05:59.537725
access("/opt/kaarpux/libreoffice-4.0.0.1/lib/libreoffice/program/unorc",



F_OK) = 0
9579  08:05:59.537767
access("/opt/kaarpux/libreoffice-4.0.0.1/lib/libreoffice/program/../program/boot",




F_OK) = -1 ENOENT (No such file or directory)

look oddly truncated.  For example, there should be a
.../program/boostraprc file that soffice.bin would indeed try to open
early on.

Sorry, I just ran LO with --strace option.
Attached is the corresponding output with strace -s2048

Apart from not finding "libreoffice/program/../program/boot"
the search for "libreoffice/program/../progra" (without trailing m)
looks suspicious

With "oddly truncated" I did mean the filenames in the strace output
(which should never be truncated by strace, regardless of any -s
settings).  (And there's a typo in what I wrote, the non-truncated
filename is "bootstraprc", not "boostraprc".)

Sorry about the confusion, my bad.
I guess that misunderstandings aside we agree, that the paths looks
oddly truncated.
I have no clue why this would happen.
Any ideas?

So I just ran into a problem with a libreoffice-4-0-0 build of mine on
Mac OS X whose symptoms looked very much like the above, expanding LO
bootstrap variables ($UserInstallation from bootstraprc in my case) to
pathnames that were oddly truncated.  I tracked that down to bad calls
to putenv (the code to expand bootstrap variables in
sal/rtl/source/bootstrap.cxx tries to obtain values for that variables
via getenv, among others, so it is susceptible to problems resulting
from a broken environment), see
<http://cgit.freedesktop.org/libreoffice/core/commit/?id=d841273ba54b173020aa8da18ba7841cf950c13c>
"Do not call putenv with a temporary string argument."

While that fix is in Mac OS X specific code (so cannot be the cause of
your Linux problems), there are more calls to putenv in the LO code
base, and some of the might be broken in a similar way.

Stephan


Thank you very much for pointing out this problem, Stephan!!

grep shows 40 files containing "putenv"

android/Bootstrap/src/org/libreoffice/android/Bootstrap.java
android/experimental/LibreOffice4Android/src/org/libreoffice/ui/LibreOfficeUIActivity.java
android/experimental/LibreOffice4Android/src/org/libreoffice/android/DocumentLoader.java
android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
ChangeLog
cppuhelper/test/loader/loader.test.cxx
crashrep/source/unx/main.cxx
crashrep/source/win32/soreport.cpp
dmake/unix/bsdarm32/config.mk
dmake/unix/bsdarm32/make.sh
dmake/unix/bsdarm32/putenv.c
dmake/unix/sysvr1/putenv.c
dmake/unix/bsd43/uw/make.sh
dmake/unix/bsd43/vf/make.sh
dmake/unix/bsd43/config.mk
dmake/unix/bsd43/make.sh
dmake/unix/bsd43/putenv.c
dmake/tos/config.mk
dmake/tos/make.sh
dmake/tos/putenv.c
dmake/sysintf.c
dmake/ChangeLog
extensions/test/ole/OleConverterVar1/convTest.cxx
jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
odk/source/unoapploader/unx/unoapploader.c
odk/source/unoapploader/win/unoapploader.c
sal/qa/rtl/bootstrap/rtl_Bootstrap.cxx
sal/qa/rtl/logfile/rtl_logfile.cxx
sal/android/lo-bootstrap.c
sal/osl/w32/process.cxx
sal/osl/unx/process_impl.cxx
sal/osl/unx/process.cxx
sal/osl/unx/signal.c
stoc/test/testsmgr.cxx
stoc/test/testregistry.cxx
svtools/bmpmaker/bmp.cxx
svtools/bmpmaker/bmpsum.cxx
ucb/workben/ucb/ucbdemo.cxx
vcl/aqua/source/app/salinst.cxx
vcl/ios/source/app/salinst.cxx

I am starting to look through those that looks relevant to my problem:

cppuhelper/test/loader/loader.test.cxx
putenv usage seems wrong; it is auto allocated.
But does not seem to be related to my problem, so I will leave it for now.

jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
Has strdup; so probably OK (although leaking)

odk/source/unoapploader/unx/unoapploader.c
Has malloc; so probably OK (although leaking)

sal/qa/rtl/bootstrap/rtl_Bootstrap.cxx
Only for #if (defined WNT) || (defined SOLARIS)
so not relevant; other targets have setenv

sal/qa/rtl/logfile/rtl_logfile.cxx
As sal/qa/rtl/bootstrap/rtl_Bootstrap.cxx

sal/osl/unx/process_impl.cxx
Only for #if defined (SOLARIS)
so not relevant

sal/osl/unx/signal.c
has
putenv( rtl_string_getStr( strEnv ) );
I have no clue about rtl_string_getStr
maybe OK maybe not ?

sal/osl/unx/process.cxx
has
putenv(data.m_pszEnv[i]);

THIS MIGHT BE RELEVANT

We have

static void ChildStatusProc(void *pData)
{
...
    ProcessData  data;
    ProcessData *pdata;
...
    pdata = (ProcessData *)pData;
    /* make a copy of our data, because forking will only copy
our local stack of the thread, so the process data will not be accessible
       in our child process */
    memcpy(&data, pData, sizeof(data));
...
    if ( (status == 0) && ((pid = fork()) == 0) )
    {
...
                if (strchr(data.m_pszEnv[i], '=') == NULL)
                {
unsetenv(data.m_pszEnv[i]); /*TODO: check error return*/
                }
                else
                {
                    putenv(data.m_pszEnv[i]); /*TODO: check error return*/
                }
            }

It looks to me like the comment intends a deep copy, whereas the memcpy only does a shallow copy.

I do not have enough knowledge of LibreOffice to figure out how to solve this without introducing bugs of my own.

Any input on this would be most appreciated...

/Henrik



Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.