<html>
    <head>
      <base href="https://bugs.documentfoundation.org/">
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - LibreOffice crashes when opening a document in print preview"
   href="https://bugs.documentfoundation.org/show_bug.cgi?id=130559#c10">Comment # 10</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - LibreOffice crashes when opening a document in print preview"
   href="https://bugs.documentfoundation.org/show_bug.cgi?id=130559">bug 130559</a>
              from <span class="vcard"><a class="email" href="mailto:mikekaganski@hotmail.com" title="Mike Kaganski <mikekaganski@hotmail.com>"> <span class="fn">Mike Kaganski</span></a>
</span></b>
        <pre>(In reply to Julien Nabet from <a href="show_bug.cgi?id=130559#c8">comment #8</a>)
<span class="quote">> Just for the test, I tried the same thing on Writer.
> ...
> -> no crash</span >

The problem here is that preview data is exported into ODS' settings.xml
(/office:document-settings/office:settings/config:config-item-set[1]/config:config-item-map-indexed/config:config-item-map-entry/config:config-item:
ViewId = view2). Then on load, this ViewId is used in
SfxBaseModel::createViewController called from impl_createDocumentView called
from SfxFrameLoader_Impl::load, and an instance of preview is attempted to be
created, which throws and crashes.

On the other hand, preview data is not exported into ODT. The difference is in
implementation of ScPreviewShell::WriteUserDataSequence vs
SfxViewShell::WriteUserDataSequence (i.e., ScPreviewShell overrides the
WriteUserDataSequence method, while SwPagePreview does not, and uses base empty
method).

The implementation of ScPreviewShell::WriteUserDataSequence was added in
<a href="https://git.libreoffice.org/core/+/1f51730f3c5b05c3afaa35431c925482e8152783">https://git.libreoffice.org/core/+/1f51730f3c5b05c3afaa35431c925482e8152783</a>,
without any explanation in commit message (the issue number in some internal
tracker is unavailable).

The options are:

1. Remove the implementation - with possible unknown regression.
2. Pass an information to the implementation, so that it conditionally doesn't
write information. As this is called through UNO interface during the export,
the only method to pass the necessary data is using component context, like
done in <a href="https://gerrit.libreoffice.org/c/core/+/81616">https://gerrit.libreoffice.org/c/core/+/81616</a> using SetFlagContext.
3. Process the result of getViewData() in SvXMLExport::GetViewSettingsAndViews,
so that when aProps.hasElements, the elements are checked if ViewId gives a
preview shell ... bad: needs to know modules' preview shell classes; needs to
modify the XIndexAccess instance (re-create it "filtered" in case of multiple
views, one of which should not be exported)...</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>