[Libreoffice-commits] core.git: Branch 'distro/cib/libreoffice-5-0' - 93 commits - bin/symbolstore.py bin/upload_symbols.py cli_ure/Executable_climaker.mk cli_ure/Library_cli_cppuhelper_native.mk cli_ure/Library_cli_uno.mk config_host/config_features.h.in config_host.mk.in configure.ac desktop/Executable_minidump_upload.mk desktop/Library_crashreport.mk desktop/Library_sofficeapp.mk desktop/Module_desktop.mk desktop/source desktop/StaticLibrary_minidump.mk distro-configs/LibreOfficeLinux.conf distro-configs/LibreOfficeWin32.conf distro-configs/LibreOfficeWin64.conf download.lst embedserv/source extensions/source extensions/test external/breakpad external/Module_external.mk framework/Library_fwk.mk framework/source include/desktop include/sal jvmfwk/plugins Makefile.fetch Makefile.gbuild Makefile.in officecfg/registry RepositoryExternal.mk Repository.mk sal/inc sal/Library_sal.mk sal/osl solenv/gbuild svx/Library_svx.mk svx/source svx/uiconfig svx/UIConfig_svx.mk svx/util vcl/Library_vcl.mk vcl/op engl vcl/source

Samuel Mehrbrodt Samuel.Mehrbrodt at cib.de
Wed Jan 18 09:05:53 UTC 2017


 Makefile.fetch                                             |    1 
 Makefile.gbuild                                            |    3 
 Makefile.in                                                |   13 
 Repository.mk                                              |    2 
 RepositoryExternal.mk                                      |   24 
 bin/symbolstore.py                                         |  644 +++++++++++++
 bin/upload_symbols.py                                      |   50 +
 cli_ure/Executable_climaker.mk                             |    2 
 cli_ure/Library_cli_cppuhelper_native.mk                   |    1 
 cli_ure/Library_cli_uno.mk                                 |    1 
 config_host.mk.in                                          |    2 
 config_host/config_features.h.in                           |    5 
 configure.ac                                               |   37 
 desktop/Executable_minidump_upload.mk                      |   27 
 desktop/Library_crashreport.mk                             |   49 
 desktop/Library_sofficeapp.mk                              |    8 
 desktop/Module_desktop.mk                                  |    4 
 desktop/StaticLibrary_minidump.mk                          |   19 
 desktop/source/app/app.cxx                                 |   68 +
 desktop/source/app/crashreport.cxx                         |  136 ++
 desktop/source/app/sofficemain.cxx                         |   64 +
 desktop/source/app/sofficemain.h                           |    2 
 desktop/source/inc/desktopdllapi.h                         |   24 
 desktop/source/minidump/minidump.cxx                       |  207 ++++
 desktop/source/minidump/minidump_upload.cxx                |   32 
 desktop/source/pkgchk/unopkg/unopkg_app.cxx                |    2 
 desktop/source/pkgchk/unopkg/unopkg_main.h                 |    2 
 distro-configs/LibreOfficeLinux.conf                       |    1 
 distro-configs/LibreOfficeWin32.conf                       |    1 
 distro-configs/LibreOfficeWin64.conf                       |    1 
 download.lst                                               |    2 
 embedserv/source/embed/docholder.cxx                       |    2 
 extensions/source/ole/oleobjw.cxx                          |    2 
 extensions/source/ole/servprov.cxx                         |   10 
 extensions/source/ole/unoconversionutilities.hxx           |    6 
 extensions/test/ole/OleClient/funcs.cxx                    |    2 
 extensions/test/ole/OleConverterVar1/convTest.cxx          |    2 
 external/Module_external.mk                                |    1 
 external/breakpad/ExternalProject_breakpad.mk              |   29 
 external/breakpad/Makefile                                 |   14 
 external/breakpad/Module_breakpad.mk                       |   26 
 external/breakpad/README                                   |   21 
 external/breakpad/StaticLibrary_breakpad.mk                |   37 
 external/breakpad/UnpackedTarball_breakpad.mk              |   21 
 external/breakpad/breakpad-stackwalk.patch.1               |   32 
 external/breakpad/breakpad-use-correct-http-header.patch.1 |   14 
 external/breakpad/breakpad-wshadow.patch.1                 |  232 ++++
 external/breakpad/breakpad-wshadow2.patch.1                |  144 ++
 framework/Library_fwk.mk                                   |    2 
 framework/source/loadenv/loadenv.cxx                       |    2 
 framework/source/services/desktop.cxx                      |   16 
 include/desktop/crashreport.hxx                            |   80 +
 include/desktop/dllapi.h                                   |   30 
 include/desktop/minidump.hxx                               |   25 
 include/sal/config.h                                       |    3 
 jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx        |    3 
 officecfg/registry/data/org/openoffice/Office/Common.xcu   |    2 
 sal/Library_sal.mk                                         |    1 
 sal/inc/internal/signalshared.hxx                          |   42 
 sal/osl/all/signalshared.cxx                               |  164 +++
 sal/osl/unx/signal.cxx                                     |  215 ----
 sal/osl/w32/salinit.cxx                                    |    6 
 sal/osl/w32/signal.cxx                                     |  257 -----
 solenv/gbuild/extensions/pre_MergedLibsList.mk             |    1 
 solenv/gbuild/platform/com_MSC_defs.mk                     |    2 
 svx/Library_svx.mk                                         |    7 
 svx/UIConfig_svx.mk                                        |    1 
 svx/source/dialog/crashreportdlg.cxx                       |  100 ++
 svx/source/dialog/crashreportdlg.hxx                       |   45 
 svx/source/dialog/crashreportui.cxx                        |  100 ++
 svx/uiconfig/ui/crashreportdlg.ui                          |  118 ++
 svx/util/svx.component                                     |    4 
 vcl/Library_vcl.mk                                         |    2 
 vcl/opengl/win/WinDeviceInfo.cxx                           |    6 
 vcl/opengl/x11/X11DeviceInfo.cxx                           |    7 
 vcl/source/opengl/OpenGLHelper.cxx                         |    3 
 vcl/source/window/builder.cxx                              |    6 
 77 files changed, 2833 insertions(+), 446 deletions(-)

New commits:
commit 54ae9b6385a36631388ebb0201a563e0450f8b9f
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date:   Fri Jan 13 15:27:41 2017 +0100

    tdf#96011 Document is not focused when opening a second window
    
    This reverts commit fa52e16b3fb1b8b051f8f64a52c126ba3cbf4d54.

diff --git a/officecfg/registry/data/org/openoffice/Office/Common.xcu b/officecfg/registry/data/org/openoffice/Office/Common.xcu
index ffca153..1889d3f 100644
--- a/officecfg/registry/data/org/openoffice/Office/Common.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Common.xcu
@@ -27,7 +27,7 @@
     </node>
     <node oor:name="NewDocumentHandling">
       <prop oor:name="ForceFocusAndToFront">
-        <value install:module="wnt">false</value>
+        <value install:module="wnt">true</value>
       </prop>
     </node>
     <node oor:name="Localisation">
commit 9b15fee3b0ef2fb141fe7d40b488940d84724228
Author: Thorsten Behrens <Thorsten.Behrens at CIB.de>
Date:   Fri Jan 13 21:09:42 2017 +0100

    fixup:  bring window to top and restore window when minimized
    
    We're before the enum class cleanups...
    
    Change-Id: Idcabdfb9d03258a3c4562c1e085929d4a853e411

diff --git a/framework/source/loadenv/loadenv.cxx b/framework/source/loadenv/loadenv.cxx
index ab4010f..ea4162c 100644
--- a/framework/source/loadenv/loadenv.cxx
+++ b/framework/source/loadenv/loadenv.cxx
@@ -1665,7 +1665,7 @@ void LoadEnv::impl_makeFrameWindowVisible(const css::uno::Reference< css::awt::X
         }
 
         if( pWindow->IsVisible() && (bForceFrontAndFocus || bForceToFront) )
-            pWindow->ToTop( ToTopFlags::RestoreWhenMin | ToTopFlags::ForegroundTask );
+            pWindow->ToTop( TOTOP_RESTOREWHENMIN | TOTOP_FOREGROUNDTASK );
         else
             pWindow->Show(true, (bForceFrontAndFocus || bForceToFront) ? SHOW_FOREGROUNDTASK : 0 );
     }
commit 29760f5f7421c1addd5672147b66adaebb510bbb
Author: Mark Hung <marklh9 at gmail.com>
Date:   Sat Apr 9 23:45:28 2016 +0800

    tdf#48300 bring window to top and restore window when minimized.
    
    While XWindow->ToTop() in Linux do the both for default ( None ),
    ToTopFlags::RestoreWhenMin has to be specified in Windows in order
    to restore the window, and ToTopFlags::ForegroundTask is necessary
    when ToTopFlags::RestoreWhenMin is specified in order to bring
    non-minimized window to the front.
    
    Change-Id: Ief4a825a18d874a0c35211c9022a4261da6bcf8f
    Reviewed-on: https://gerrit.libreoffice.org/23938
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/framework/source/loadenv/loadenv.cxx b/framework/source/loadenv/loadenv.cxx
index 4261971..ab4010f 100644
--- a/framework/source/loadenv/loadenv.cxx
+++ b/framework/source/loadenv/loadenv.cxx
@@ -1665,7 +1665,7 @@ void LoadEnv::impl_makeFrameWindowVisible(const css::uno::Reference< css::awt::X
         }
 
         if( pWindow->IsVisible() && (bForceFrontAndFocus || bForceToFront) )
-            pWindow->ToTop();
+            pWindow->ToTop( ToTopFlags::RestoreWhenMin | ToTopFlags::ForegroundTask );
         else
             pWindow->Show(true, (bForceFrontAndFocus || bForceToFront) ? SHOW_FOREGROUNDTASK : 0 );
     }
commit 44b24340dcccf666c1ae19edeb67622f4aae9cca
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date:   Fri Jan 13 11:50:12 2017 +0100

    Crashdump: Make crash directory configurable
    
    Change-Id: I8106ec674080ede7072581dab2e6700040de5828

diff --git a/desktop/source/app/crashreport.cxx b/desktop/source/app/crashreport.cxx
index 04b234f..9359113 100644
--- a/desktop/source/app/crashreport.cxx
+++ b/desktop/source/app/crashreport.cxx
@@ -82,22 +82,34 @@ void CrashReporter::writeCommonInfo()
 
 namespace {
 
-OUString getCrashUserProfileDirectory()
+OUString getCrashDirectory()
 {
-    OUString url("${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/crash/");
-    rtl::Bootstrap::expandMacros(url);
-    osl::Directory::create(url);
+    OUString aCrashURL;
 
-    OUString aProfilePath;
-    osl::FileBase::getSystemPathFromFileURL(url, aProfilePath);
-    return aProfilePath;
+    // First check whether a user-defined path is available (crashreport.ini)
+    OUString aCrashPath("${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE("crashreport") ":CrashDirectory}");
+    rtl::Bootstrap::expandMacros(aCrashPath);
+    osl::FileBase::getFileURLFromSystemPath(aCrashPath, aCrashURL);
+
+    // Fall back to user profile
+    if (aCrashPath.isEmpty())
+    {
+        aCrashURL = "${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/crash";
+        rtl::Bootstrap::expandMacros(aCrashURL);
+    }
+
+    if (!aCrashURL.endsWith("/"))
+        aCrashURL += "/";
+    osl::FileBase::RC rc = osl::Directory::create(aCrashURL);
+    osl::FileBase::getSystemPathFromFileURL(aCrashURL, aCrashPath);
+    return aCrashPath;
 }
 
 }
 
 void CrashReporter::updateMinidumpLocation()
 {
-    OUString aURL = getCrashUserProfileDirectory();
+    OUString aURL = getCrashDirectory();
     OString aOStringUrl = OUStringToOString(aURL, RTL_TEXTENCODING_UTF8);
 
 #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID
@@ -115,7 +127,7 @@ void CrashReporter::storeExceptionHandler(google_breakpad::ExceptionHandler* pEx
 
 std::string CrashReporter::getIniFileName()
 {
-    OUString url = getCrashUserProfileDirectory() + "dump.ini";
+    OUString url = getCrashDirectory() + "dump.ini";
     OString aUrl = OUStringToOString(url, RTL_TEXTENCODING_UTF8);
     std::string aRet(aUrl.getStr());
     return aRet;
commit 6fac2f72af22d39b42423088d0307ff1295ac1b6
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date:   Thu Jan 12 16:47:40 2017 +0100

    Disable CrashReportUI
    
    since we don't offer upload - only want the dumps
    
    Change-Id: I6d084757d83204cb960905d7eb78571b13f8f875

diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index 3be4f9e..bfe5219 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -1053,7 +1053,8 @@ bool crashReportInfoExists()
 #if HAVE_FEATURE_BREAKPAD
 void handleCrashReport()
 {
-    static const char SERVICENAME_CRASHREPORT[] = "com.sun.star.comp.svx.CrashReportUI";
+    // Don't show the dialog since we don't offer upload - only want the dumps
+    /*static const char SERVICENAME_CRASHREPORT[] = "com.sun.star.comp.svx.CrashReportUI";
 
     css::uno::Reference< css::uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
 
@@ -1067,7 +1068,7 @@ void handleCrashReport()
     css::util::URL aURL;
     css::uno::Any aRet = xRecoveryUI->dispatchWithReturnValue(aURL, css::uno::Sequence< css::beans::PropertyValue >());
     bool bRet = false;
-    aRet >>= bRet;
+    aRet >>= bRet;*/
 }
 #endif
 
commit de3e1de7a34c6b13579792cf6889e053402ff874
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date:   Thu Jan 12 16:46:45 2017 +0100

    Add build id to crash metadata
    
    Change-Id: I0e11a96936ea08cc439fcc1b1e3ff1f59c636665

diff --git a/desktop/Library_crashreport.mk b/desktop/Library_crashreport.mk
index ba2f348..d6d9b8b 100644
--- a/desktop/Library_crashreport.mk
+++ b/desktop/Library_crashreport.mk
@@ -36,6 +36,7 @@ $(eval $(call gb_Library_use_libraries,crashreport,\
     cppuhelper \
     sal \
     salhelper \
+    utl \
 	$(gb_UWINAPI) \
 ))
 
diff --git a/desktop/source/app/crashreport.cxx b/desktop/source/app/crashreport.cxx
index 428339d..04b234f 100644
--- a/desktop/source/app/crashreport.cxx
+++ b/desktop/source/app/crashreport.cxx
@@ -10,6 +10,7 @@
 #include <desktop/crashreport.hxx>
 #include <rtl/bootstrap.hxx>
 #include <osl/file.hxx>
+#include <unotools/bootstrap.hxx>
 
 #include <config_version.h>
 #include <config_folders.h>
@@ -65,6 +66,7 @@ void CrashReporter::writeCommonInfo()
     std::ofstream minidump_file(ini_path, std::ios_base::trunc);
     minidump_file << "ProductName=LibreOffice\n";
     minidump_file << "Version=" LIBO_VERSION_DOTTED "\n";
+    minidump_file << "BuildID=" << utl::Bootstrap::getBuildIdData("") << "\n";
     minidump_file << "URL=http://crashreport.libreoffice.org/submit/\n";
     for (auto& keyValue : maKeyValues)
     {
commit b88c2165f2a553d944a99ce78ccf867531221f7e
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date:   Thu Jan 12 14:28:04 2017 +0100

    Prevent warning b/c of unreachable code
    
    Change-Id: If18350314600132b2663e99b85abe3684585e6cf

diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index dba80c0..2d71eb8 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -1764,16 +1764,16 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &
             }
         }
     }
-    SAL_WARN_IF(!xWindow, "vcl.layout", "probably need to implement " << name.getStr() << " or add a make" << name.getStr() << " function");
+    //SAL_WARN_IF(!xWindow, "vcl.layout", "probably need to implement " << name.getStr() << " or add a make" << name.getStr() << " function");
     if (xWindow)
     {
         xWindow->SetHelpId(m_sHelpRoot + id);
-        SAL_INFO("vcl.layout", "for " << name.getStr() <<
+        /*SAL_INFO("vcl.layout", "for " << name.getStr() <<
             ", created " << xWindow.get() << " child of " <<
             pParent << "(" << xWindow->mpWindowImpl->mpParent.get() << "/" <<
             xWindow->mpWindowImpl->mpRealParent.get() << "/" <<
             xWindow->mpWindowImpl->mpBorderWindow.get() << ") with helpid " <<
-            xWindow->GetHelpId().getStr());
+            xWindow->GetHelpId().getStr());*/
         m_aChildren.push_back(WinAndId(id, xWindow, bVertical));
     }
     return xWindow;
commit bd1ac6d7aca2fa472e5d1a552671bff29b88dd59
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date:   Thu Jan 12 13:49:17 2017 +0100

    Fix CrashReportDialog
    
    Change-Id: I0a4ba001dcd8dc5d1027f798c8abbf6d2162314e

diff --git a/svx/source/dialog/crashreportdlg.cxx b/svx/source/dialog/crashreportdlg.cxx
index a05a8e0..f9652a8 100644
--- a/svx/source/dialog/crashreportdlg.cxx
+++ b/svx/source/dialog/crashreportdlg.cxx
@@ -33,7 +33,7 @@ CrashReportDialog::CrashReportDialog(vcl::Window* pParent):
     mpBtnSend->SetClickHdl(LINK(this, CrashReportDialog, BtnHdl));
     mpBtnCancel->SetClickHdl(LINK(this, CrashReportDialog, BtnHdl));
     mpBtnClose->SetClickHdl(LINK(this, CrashReportDialog, BtnHdl));
-    mpEditPostUpload->SetReadOnly(true);
+    mpEditPostUpload->SetReadOnly();
 }
 
 CrashReportDialog::~CrashReportDialog()
@@ -53,19 +53,7 @@ void CrashReportDialog::dispose()
     Dialog::dispose();
 }
 
-namespace {
-
-OUString getLibDir()
-{
-    OUString aOriginal = "$BRAND_BASE_DIR/" LIBO_LIBEXEC_FOLDER;
-    rtl::Bootstrap::expandMacros(aOriginal);
-
-    return aOriginal;
-}
-
-}
-
-IMPL_LINK_TYPED(CrashReportDialog, BtnHdl, Button*, pBtn, void)
+IMPL_LINK(CrashReportDialog, BtnHdl, Button*, pBtn)
 {
     if (pBtn == mpBtnSend.get())
     {
@@ -106,6 +94,7 @@ IMPL_LINK_TYPED(CrashReportDialog, BtnHdl, Button*, pBtn, void)
     {
         Close();
     }
+    return 0;
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/dialog/crashreportdlg.hxx b/svx/source/dialog/crashreportdlg.hxx
index 89f567a..f99a4e1 100644
--- a/svx/source/dialog/crashreportdlg.hxx
+++ b/svx/source/dialog/crashreportdlg.hxx
@@ -20,9 +20,9 @@ class CrashReportDialog : public Dialog
 {
 public:
 
-    CrashReportDialog(vcl::Window* pParent);
+    explicit CrashReportDialog(vcl::Window* pParent);
 
-    ~CrashReportDialog();
+    virtual ~CrashReportDialog() override;
 
     virtual void dispose() override;
 
@@ -37,7 +37,7 @@ private:
 
     OUString maSuccessMsg;
 
-    DECL_LINK_TYPED(BtnHdl, Button*, void);
+    DECL_LINK(BtnHdl, Button*);
 };
 
 #endif
commit 82a5d4de981c62f6d2e8b6b6dfa698579127f361
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date:   Thu Jan 12 10:20:39 2017 +0100

    Update crashreportdlg.ui from master
    
    Easier than backporting changes
    
    Change-Id: Ic62d587c47d3840df5a33eb07b13b8dc1145d84e

diff --git a/svx/uiconfig/ui/crashreportdlg.ui b/svx/uiconfig/ui/crashreportdlg.ui
index c148ee8..9dd35f6 100644
--- a/svx/uiconfig/ui/crashreportdlg.ui
+++ b/svx/uiconfig/ui/crashreportdlg.ui
@@ -4,22 +4,27 @@
   <requires lib="gtk+" version="3.12"/>
   <object class="GtkDialog" id="CrashReportDialog">
     <property name="can_focus">False</property>
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Crash Report</property>
+    <property name="resizable">False</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
       <object class="GtkBox" id="dialog-vbox1">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
-        <property name="spacing">2</property>
+        <property name="spacing">12</property>
         <child internal-child="action_area">
           <object class="GtkButtonBox" id="dialog-action_area1">
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="btn_send">
-                <property name="label" translatable="yes">Send report</property>
+                <property name="label" translatable="yes">_Send Crash Report</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
+                <property name="has_default">True</property>
                 <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
               </object>
               <packing>
                 <property name="expand">True</property>
@@ -29,10 +34,11 @@
             </child>
             <child>
               <object class="GtkButton" id="btn_cancel">
-                <property name="label" translatable="yes">Don't send report</property>
+                <property name="label" translatable="yes">_Don’t Send</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
               </object>
               <packing>
                 <property name="expand">True</property>
@@ -63,9 +69,9 @@
           <object class="GtkLabel" id="ed_pre">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="label" translatable="yes">We are sorry but it seems that %PRODUCTNAME crashed the last time.
+            <property name="label" translatable="yes">Unfortunately it seems that %PRODUCTNAME crashed when it was last run.
 
-You can help us fix this issue by sending the crash report to the %PRODUCTNAME crash reporting server.</property>
+You can help us to fix this issue by sending an anonymous crash report to the %PRODUCTNAME crash reporting server.</property>
             <property name="wrap">True</property>
           </object>
           <packing>
@@ -80,7 +86,7 @@ You can help us fix this issue by sending the crash report to the %PRODUCTNAME c
             <property name="valign">center</property>
             <property name="xalign">0</property>
             <property name="label" translatable="yes">The crash report was successfully uploaded.
-You can soon find the report on:
+You can soon find the report at:
 crashreport.libreoffice.org/stats/crash_details/%CRASHID</property>
             <property name="wrap">True</property>
             <property name="selectable">True</property>
@@ -96,7 +102,7 @@ crashreport.libreoffice.org/stats/crash_details/%CRASHID</property>
             <property name="can_focus">False</property>
             <property name="label" translatable="yes">Please check the report and if no bug report is connected to the crash report yet, open a new bug report at bugs.documentfoundation.org.
 Add detailed instructions on how to reproduce the crash and the shown crash ID into the crash report field.
-Thank you for your help in improving LibreOffice.</property>
+Thank you for your help in improving %PRODUCTNAME.</property>
             <property name="wrap">True</property>
           </object>
           <packing>
commit b09e7f9df0d789bdd73b8ba61559bd88f514f147
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Jan 6 17:15:17 2017 +0100

    breakpad: document how to read mini-dumps locally
    
    Change-Id: I888930079fc93c609769ac31a025c410b9adad96

diff --git a/external/breakpad/README b/external/breakpad/README
index 41fbde6..dfd2bf9 100644
--- a/external/breakpad/README
+++ b/external/breakpad/README
@@ -1 +1,21 @@
-Render glTF 3D models.
+Google breakpad crash-reporting library
+
+https://chromium.googlesource.com/breakpad/breakpad
+
+When this is enabled and soffice.bin crashes, a "mini-dump" file is written
+as "instdir/crash/*.dmp".
+
+There is an UI to upload the mini-dump to a TDF server but of course
+that only makes sense if the server has symbols available that match
+the build, which is not the case if you have built LO yourself.
+
+If you want to get the backtrace from local mini-dump files:
+
+* with Visual Studio:
+  1. open the *.dmp file from the Visual Studio IDE File->Open->File
+  2. then click "Debug Native Only"
+
+* otherwise:
+  1. run "make symbols" to extract the debuginfo from the binaries
+  2. run "workdir/UnpackedTarball/breakpad/src/processor/minidump_stackwalk foo.dmp workdir/symbols"
+
commit 6b9d08e2fdffb4c1638d4597d5ce3f11b0d4f89f
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date:   Thu Jan 12 10:14:16 2017 +0100

    Merge fixes
    
    Change-Id: I781c4677bf25b3d95c95c82212a611abd4517978

diff --git a/external/breakpad/ExternalProject_breakpad.mk b/external/breakpad/ExternalProject_breakpad.mk
index ca7db24..10fa6ce 100644
--- a/external/breakpad/ExternalProject_breakpad.mk
+++ b/external/breakpad/ExternalProject_breakpad.mk
@@ -9,8 +9,6 @@
 
 $(eval $(call gb_ExternalProject_ExternalProject,breakpad))
 
-$(eval $(call gb_ExternalProject_use_autoconf,breakpad,build))
-
 $(eval $(call gb_ExternalProject_register_targets,breakpad,\
 	build \
 ))
diff --git a/external/breakpad/Module_breakpad.mk b/external/breakpad/Module_breakpad.mk
index 6cc740a..be91053 100644
--- a/external/breakpad/Module_breakpad.mk
+++ b/external/breakpad/Module_breakpad.mk
@@ -11,7 +11,6 @@ $(eval $(call gb_Module_Module,breakpad))
 
 $(eval $(call gb_Module_add_targets,breakpad,\
 	UnpackedTarball_breakpad \
-	ExternalPackage_breakpad \
 ))
 
 ifneq ($(OS)$(COM),WNTMSC)
commit 59eb32e4173b514047d2ef0c9b0b46605fd6fa07
Author: Michael Stahl <mstahl at redhat.com>
Date:   Tue Jul 19 14:25:14 2016 +0200

    desktop: simplify $(ENABLE_BREAKPAD) checks
    
    Change-Id: Ibe2da6214b1f6555922313b22e2882a2ddb4b9e7

diff --git a/desktop/Library_sofficeapp.mk b/desktop/Library_sofficeapp.mk
index d333e41..e57b8b1 100644
--- a/desktop/Library_sofficeapp.mk
+++ b/desktop/Library_sofficeapp.mk
@@ -23,11 +23,10 @@ $(eval $(call gb_Library_add_libs,sofficeapp,\
     ) \
 ))
 
-$(eval $(call gb_Library_use_external,sofficeapp,boost_headers))
-
-ifeq ($(ENABLE_BREAKPAD),TRUE)
-$(eval $(call gb_Library_use_external,sofficeapp,breakpad))
-endif
+$(eval $(call gb_Library_use_externals,sofficeapp, \
+	$(if $(ENABLE_BREAKPAD),breakpad) \
+    boost_headers \
+))
 
 $(eval $(call gb_Library_use_custom_headers,sofficeapp,\
 	officecfg/registry \
@@ -49,7 +48,7 @@ $(eval $(call gb_Library_use_libraries,sofficeapp,\
     comphelper \
     cppu \
     cppuhelper \
-    $(if $(filter TRUE,$(ENABLE_BREAKPAD)), \
+    $(if $(ENABLE_BREAKPAD), \
         crashreport \
     ) \
     deploymentmisc \
commit 73313af0378dc113dbb1506309ecd7505cec95d4
Author: Michael Stahl <mstahl at redhat.com>
Date:   Thu Mar 31 23:58:14 2016 +0200

    breakpad: fix module makefile
    
    ff9b7d118b34b53ec947af881fccd822e2aeb1fd removed the ExternalPackage
    instead of the ExternalProject.
    
    Change-Id: I9240526b29d0559e1485253383d39b5858e4039b

diff --git a/external/breakpad/Module_breakpad.mk b/external/breakpad/Module_breakpad.mk
index 3880760..6cc740a 100644
--- a/external/breakpad/Module_breakpad.mk
+++ b/external/breakpad/Module_breakpad.mk
@@ -10,8 +10,8 @@
 $(eval $(call gb_Module_Module,breakpad))
 
 $(eval $(call gb_Module_add_targets,breakpad,\
-	ExternalProject_breakpad \
 	UnpackedTarball_breakpad \
+	ExternalPackage_breakpad \
 ))
 
 ifneq ($(OS)$(COM),WNTMSC)
commit bc59d5a2841113d396bac9a87b09ff55962d58a6
Author: Rene Engelhard <rene at debian.org>
Date:   Mon Mar 28 22:39:12 2016 +0200

    don't build/install minidump_upload with ENABLE_BREAKPAD=
    
    Change-Id: I0f7d9811d669c2884b0c1704878678b01529e52f

diff --git a/Repository.mk b/Repository.mk
index f89d510..4fbcb5a 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -88,7 +88,7 @@ $(eval $(call gb_Helper_register_executables_for_install,SDK,sdk, \
 ))
 
 $(eval $(call gb_Helper_register_executables_for_install,OOO,brand, \
-	minidump_upload \
+	$(call gb_Helper_optional,BREAKPAD,minidump_upload) \
 	$(if $(filter-out ANDROID IOS MACOSX WNT,$(OS)),oosplash) \
 	soffice_bin \
 	$(if $(filter DESKTOP,$(BUILD_TYPE)),unopkg_bin) \
diff --git a/desktop/Module_desktop.mk b/desktop/Module_desktop.mk
index 9837714..f88f376 100644
--- a/desktop/Module_desktop.mk
+++ b/desktop/Module_desktop.mk
@@ -36,7 +36,7 @@ ifneq (,$(filter DESKTOP,$(BUILD_TYPE)))
 $(eval $(call gb_Module_add_targets,desktop,\
     Executable_soffice_bin \
     Executable_unopkg_bin \
-    Executable_minidump_upload \
+    $(if $(ENABLE_BREAKPAD),Executable_minidump_upload) \
     Library_migrationoo2 \
     Library_migrationoo3 \
     Library_unopkgapp \
commit ef3a4d6282fd482c444338a3765074e4c55370ca
Author: Michael Stahl <mstahl at redhat.com>
Date:   Mon Feb 29 16:30:48 2016 +0100

    desktop: fix infinite loop with --enable-breakpad
    
    Change-Id: I81a0405edc29fa7205d00a5cb920b2d0e800602e

diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index 02bd06e..3be4f9e 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -1033,7 +1033,7 @@ bool crashReportInfoExists()
 #if HAVE_FEATURE_BREAKPAD
     std::string path = CrashReporter::getIniFileName();
     std::ifstream aFile(path);
-    while (!aFile.eof())
+    while (aFile.good())
     {
         std::string line;
         std::getline(aFile, line);
commit fe98f4236d910b6e16d15cd9756fcc431fc1d640
Author: David Tardon <dtardon at redhat.com>
Date:   Mon Feb 15 07:48:58 2016 +0100

    actually allow gbuild to see breakpad makefiles...
    
    Change-Id: I12ba34f30508c0a888445a2d9b68d48807b74e8c

diff --git a/external/Module_external.mk b/external/Module_external.mk
index 6d38fd5..482c374 100644
--- a/external/Module_external.mk
+++ b/external/Module_external.mk
@@ -24,6 +24,7 @@ $(eval $(call gb_Module_add_moduledirs,external,\
 	$(call gb_Helper_optional,APACHE_COMMONS,apache-commons) \
 	$(call gb_Helper_optional,APR,apr) \
 	$(call gb_Helper_optional,BOOST,boost) \
+	$(call gb_Helper_optional,BREAKPAD,breakpad) \
 	$(call gb_Helper_optional,BSH,beanshell) \
 	$(call gb_Helper_optional,CAIRO,cairo) \
 	$(call gb_Helper_optional,CDR,libcdr) \
commit f99c1d0aaf65f4ab258ec5144c4572f070f8207d
Author: Michael Stahl <mstahl at redhat.com>
Date:   Mon Feb 29 21:56:49 2016 +0100

    desktop: fix undefined CrashReporter::AddKeyValue on MSVC
    
    Change-Id: Ie10b4849957734c2548c73dff8485cc673769e13

diff --git a/include/desktop/crashreport.hxx b/include/desktop/crashreport.hxx
index b774862..f4616e8 100644
--- a/include/desktop/crashreport.hxx
+++ b/include/desktop/crashreport.hxx
@@ -33,7 +33,12 @@ class ExceptionHandler;
  *      * AdapterDeviceId
  *
  */
-class CRASHREPORT_DLLPUBLIC CrashReporter
+class
+#if HAVE_FEATURE_BREAKPAD
+// MSVC 2013 has undefined symbols for inline functions if it's exported
+CRASHREPORT_DLLPUBLIC
+#endif
+/*class*/ CrashReporter
 {
 public:
     static void AddKeyValue(const OUString& rKey, const OUString& rValue);
commit c983137b293c344ab1b6dc8f8facbdf4e4d55bf9
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Thu Jan 5 22:35:52 2017 +0100

    add the locale info to the crashreporter metadata
    
    We have a few crashes that seem locale dependent. Especially the font
    related problems.
    
    Change-Id: I0cc977413dc2328ea705c96c2d4048e4f3c58bbc
    Reviewed-on: https://gerrit.libreoffice.org/32764
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index 6ec91e7..02bd06e 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -2355,6 +2355,8 @@ void Desktop::OpenClients()
     }
 #if HAVE_FEATURE_BREAKPAD
     CrashReporter::writeCommonInfo();
+    // write this information here to avoid depending on vcl in the crash reporter lib
+    CrashReporter::AddKeyValue("Language", Application::GetSettings().GetLanguageTag().getBcp47());
 #endif
 
     OfficeIPCThread::EnableRequests();
commit f879f932de7e75b097d8e50225205ad783326085
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Wed Dec 28 23:57:36 2016 +0100

    add a crashreporter entry when we start the shutdown
    
    This will help us identify shutdown related crashes.
    
    Change-Id: Id09c3dfdc94c430d5dcb2aebb017f17db80f17e5
    Reviewed-on: https://gerrit.libreoffice.org/32485
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/framework/Library_fwk.mk b/framework/Library_fwk.mk
index 74e72a9..843bc08 100644
--- a/framework/Library_fwk.mk
+++ b/framework/Library_fwk.mk
@@ -41,6 +41,8 @@ $(eval $(call gb_Library_use_libraries,fwk,\
     comphelper \
     cppu \
     cppuhelper \
+    $(call gb_Helper_optional,BREAKPAD, \
+		crashreport) \
     fwe \
     fwi \
     i18nlangtag \
diff --git a/framework/source/services/desktop.cxx b/framework/source/services/desktop.cxx
index 24b9761..9880e2b 100644
--- a/framework/source/services/desktop.cxx
+++ b/framework/source/services/desktop.cxx
@@ -61,6 +61,7 @@
 #include <comphelper/sequence.hxx>
 #include <cppuhelper/supportsservice.hxx>
 #include <vcl/svapp.hxx>
+#include <desktop/crashreport.hxx>
 
 #include <tools/errinf.hxx>
 #include <comphelper/extract.hxx>
@@ -296,13 +297,14 @@ sal_Bool SAL_CALL Desktop::terminate()
         impl_sendCancelTerminationEvent(lCalledTerminationListener);
     else
     {
-            // "Protect" us against dispose before terminate calls!
-            // see dispose() for further information.
-            /* SAFE AREA --------------------------------------------------------------------------------------- */
-            SolarMutexClearableGuard aWriteLock;
-            m_bIsTerminated = true;
-            aWriteLock.clear();
-            /* UNSAFE AREA ------------------------------------------------------------------------------------- */
+        // "Protect" us against dispose before terminate calls!
+        // see dispose() for further information.
+        /* SAFE AREA --------------------------------------------------------------------------------------- */
+        SolarMutexClearableGuard aWriteLock;
+        CrashReporter::AddKeyValue("ShutDown", OUString::boolean(true));
+        m_bIsTerminated = true;
+        aWriteLock.clear();
+        /* UNSAFE AREA ------------------------------------------------------------------------------------- */
 
         impl_sendNotifyTerminationEvent();
 
commit 7e6ea3f9d8743cfb6b3c154751674c6354895a35
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sun Dec 11 00:06:47 2016 +0100

    don't overwrite the crashreport info that are written before upload
    
    There was a race condition that the OpenGL code was initialized before
    the old report has been uploaded. Therefore the OpenGL setting was
    overwritten by the new start and we were not getting the old value.
    
    Now we store any value that wants to be added before the dump.ini is
    ready in a temporary map and will write them as soon as we write all the
    common information.
    
    This problem was introduced by the dialog requesting permission to
    upload the crash report.
    
    Change-Id: I29391a1ff56bac6381218c5a4aefb58c2c03f024
    Reviewed-on: https://gerrit.libreoffice.org/31846
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/desktop/source/app/crashreport.cxx b/desktop/source/app/crashreport.cxx
index c1d57de..428339d 100644
--- a/desktop/source/app/crashreport.cxx
+++ b/desktop/source/app/crashreport.cxx
@@ -27,28 +27,54 @@ osl::Mutex CrashReporter::maMutex;
 #endif
 
 google_breakpad::ExceptionHandler* CrashReporter::mpExceptionHandler = nullptr;
+bool CrashReporter::mbInit = false;
+std::map<OUString, OUString> CrashReporter::maKeyValues;
+
+namespace {
+
+void writeToStream(std::ofstream& strm, const OUString& rKey, const OUString& rValue)
+{
+    strm << rtl::OUStringToOString(rKey, RTL_TEXTENCODING_UTF8).getStr() << "=";
+    strm << rtl::OUStringToOString(rValue, RTL_TEXTENCODING_UTF8).getStr() << "\n";
+}
+
+}
 
 void CrashReporter::AddKeyValue(const OUString& rKey, const OUString& rValue)
 {
     osl::MutexGuard aGuard(maMutex);
-    std::string ini_path = getIniFileName();
-    std::ofstream ini_file(ini_path, std::ios_base::app);
-    ini_file << rtl::OUStringToOString(rKey, RTL_TEXTENCODING_UTF8).getStr() << "=";
-    ini_file << rtl::OUStringToOString(rValue, RTL_TEXTENCODING_UTF8).getStr() << "\n";
+    if (mbInit)
+    {
+        std::string ini_path = getIniFileName();
+        std::ofstream ini_file(ini_path, std::ios_base::app);
+        writeToStream(ini_file, rKey, rValue);
+    }
+    else
+    {
+        maKeyValues.insert(std::pair<OUString, OUString>(rKey, rValue));
+    }
 }
 
 #endif
 
 void CrashReporter::writeCommonInfo()
 {
+    osl::MutexGuard aGuard(maMutex);
     // limit the amount of code that needs to be executed before the crash reporting
     std::string ini_path = CrashReporter::getIniFileName();
     std::ofstream minidump_file(ini_path, std::ios_base::trunc);
     minidump_file << "ProductName=LibreOffice\n";
     minidump_file << "Version=" LIBO_VERSION_DOTTED "\n";
     minidump_file << "URL=http://crashreport.libreoffice.org/submit/\n";
+    for (auto& keyValue : maKeyValues)
+    {
+        writeToStream(minidump_file, keyValue.first, keyValue.second);
+    }
+    maKeyValues.clear();
     minidump_file.close();
 
+    mbInit = true;
+
     updateMinidumpLocation();
 }
 
diff --git a/include/desktop/crashreport.hxx b/include/desktop/crashreport.hxx
index 47e1fba..b774862 100644
--- a/include/desktop/crashreport.hxx
+++ b/include/desktop/crashreport.hxx
@@ -52,6 +52,10 @@ private:
 
     static osl::Mutex maMutex;
 
+    static bool mbInit;
+
+    static std::map<OUString, OUString> maKeyValues; // used to temporarily save entries before the old info has been uploaded
+
     static google_breakpad::ExceptionHandler* mpExceptionHandler;
 };
 
commit 72e4cbf1de6d06c5eec96398ed1265a59ead670e
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Wed Jun 8 12:14:30 2016 +0200

    use a dynamic library for minidump shared code
    
    This has the disadvantage to make the minidump_upload executable depend on LibreOffice libraries but there seems to be no other way to make the 7.1 SDK happy.
    
    Change-Id: I82c37f503ed29cb50711eae7db22063f49747a48
    Reviewed-on: https://gerrit.libreoffice.org/26055
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    (cherry picked from commit 3498cd3e7b2c820fc3f3025eb4434666a444fda1)
    Reviewed-on: https://gerrit.libreoffice.org/26915
    Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>

diff --git a/desktop/Executable_minidump_upload.mk b/desktop/Executable_minidump_upload.mk
index 2c02023..959d4af8 100644
--- a/desktop/Executable_minidump_upload.mk
+++ b/desktop/Executable_minidump_upload.mk
@@ -10,11 +10,12 @@
 $(eval $(call gb_Executable_Executable,minidump_upload))
 
 $(eval $(call gb_Executable_use_libraries,minidump_upload,\
+	crashreport \
     sal \
 ))
 
-$(eval $(call gb_Executable_use_static_libraries,minidump_upload,\
-	minidump \
+$(eval $(call gb_Executable_add_defs,minidump_upload,\
+	-DUNICODE \
 ))
 
 $(eval $(call gb_Executable_use_external,minidump_upload,curl))
diff --git a/desktop/Library_crashreport.mk b/desktop/Library_crashreport.mk
index 5b14519..ba2f348 100644
--- a/desktop/Library_crashreport.mk
+++ b/desktop/Library_crashreport.mk
@@ -14,7 +14,10 @@ $(eval $(call gb_Library_set_include,crashreport,\
     -I$(SRCDIR)/desktop/inc \
 ))
 
-$(eval $(call gb_Library_use_external,crashreport,breakpad))
+$(eval $(call gb_Library_use_externals,crashreport,\
+    breakpad \
+curl \
+))
 
 $(eval $(call gb_Library_add_defs,crashreport,\
     -DCRASHREPORT_DLLIMPLEMENTATION \
@@ -38,6 +41,7 @@ $(eval $(call gb_Library_use_libraries,crashreport,\
 
 $(eval $(call gb_Library_add_exception_objects,crashreport,\
     desktop/source/app/crashreport \
+    desktop/source/minidump/minidump \
 ))
 
 
diff --git a/desktop/Module_desktop.mk b/desktop/Module_desktop.mk
index c16bfe8..9837714 100644
--- a/desktop/Module_desktop.mk
+++ b/desktop/Module_desktop.mk
@@ -19,7 +19,7 @@ $(eval $(call gb_Module_add_targets,desktop,\
     Library_sofficeapp \
     $(if $(ENABLE_BREAKPAD), \
         Library_crashreport \
-        StaticLibrary_minidump) \
+        ) \
     $(if $(ENABLE_HEADLESS),,Library_spl) \
     Package_branding \
     $(if $(CUSTOM_BRAND_DIR),Package_branding_custom) \
diff --git a/desktop/source/minidump/minidump.cxx b/desktop/source/minidump/minidump.cxx
index 135b24a..e44fc4c 100644
--- a/desktop/source/minidump/minidump.cxx
+++ b/desktop/source/minidump/minidump.cxx
@@ -13,6 +13,7 @@
 #include <memory>
 #include <fstream>
 #include <sstream>
+#include <string>
 
 #include <curl/curl.h>
 
@@ -178,6 +179,8 @@ bool uploadContent(std::map<std::string, std::string>& parameters, std::string&
     return true;
 }
 
+namespace crashreport {
+
 bool readConfig(const std::string& iniPath, std::string& response)
 {
     std::ifstream file(iniPath);
@@ -199,4 +202,6 @@ bool readConfig(const std::string& iniPath, std::string& response)
     return uploadContent(parameters, response);
 }
 
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/desktop/source/minidump/minidump_upload.cxx b/desktop/source/minidump/minidump_upload.cxx
index 934f1ad..ded2f1d 100644
--- a/desktop/source/minidump/minidump_upload.cxx
+++ b/desktop/source/minidump/minidump_upload.cxx
@@ -10,6 +10,7 @@
 #include <desktop/minidump.hxx>
 
 #include <iostream>
+#include <string>
 
 int main(int argc, char** argv)
 {
@@ -21,7 +22,7 @@ int main(int argc, char** argv)
 
     std::string iniPath(argv[1]);
     std::string response;
-    if (!readConfig(iniPath, response))
+    if (!crashreport::readConfig(iniPath, response))
         return EXIT_FAILURE;
 
     std::cout << "Response: " << response << std::endl;
diff --git a/include/desktop/minidump.hxx b/include/desktop/minidump.hxx
index bdd91b2..63336ca 100644
--- a/include/desktop/minidump.hxx
+++ b/include/desktop/minidump.hxx
@@ -12,7 +12,13 @@
 
 #include <string>
 
-bool readConfig(const std::string& iniPath, std::string& response);
+#include <desktop/dllapi.h>
+
+namespace crashreport {
+
+CRASHREPORT_DLLPUBLIC bool readConfig(const std::string& iniPath, std::string& response);
+
+}
 
 #endif
 
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk
index 87e37cb..d638229 100644
--- a/svx/Library_svx.mk
+++ b/svx/Library_svx.mk
@@ -40,14 +40,6 @@ $(eval $(call gb_Library_add_defs,svx,\
 
 $(eval $(call gb_Library_set_precompiled_header,svx,$(SRCDIR)/svx/inc/pch/precompiled_svx))
 
-ifeq ($(ENABLE_BREAKPAD),TRUE)
-
-$(eval $(call gb_Library_use_static_libraries,svx, \
-	minidump \
-))
-
-endif
-
 $(eval $(call gb_Library_use_libraries,svx,\
     basegfx \
     sb \
diff --git a/svx/source/dialog/crashreportdlg.cxx b/svx/source/dialog/crashreportdlg.cxx
index 0d800b8..a05a8e0 100644
--- a/svx/source/dialog/crashreportdlg.cxx
+++ b/svx/source/dialog/crashreportdlg.cxx
@@ -72,7 +72,7 @@ IMPL_LINK_TYPED(CrashReportDialog, BtnHdl, Button*, pBtn, void)
         std::string ini_path = CrashReporter::getIniFileName();
 
         std::string response;
-        bool bSuccess = readConfig(ini_path, response);
+        bool bSuccess = crashreport::readConfig(ini_path, response);
 
         OUString aCrashID = OUString::createFromAscii(response.c_str());
 
commit 1de21d18f11ac44b89f18b7704e7523d4fa2cd26
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Jun 27 04:42:22 2016 +0200

    I screwed up with the breakpad minidump_stackwalk patch
    
    This does not affect normal LibreOffice and is only important for the
    server side.
    
    Change-Id: I270262ed6e1b22c3ef41099fda19fa386f386203

diff --git a/external/breakpad/breakpad-stackwalk.patch.1 b/external/breakpad/breakpad-stackwalk.patch.1
index 9a3ce95..8df1fa3 100644
--- a/external/breakpad/breakpad-stackwalk.patch.1
+++ b/external/breakpad/breakpad-stackwalk.patch.1
@@ -24,9 +24,9 @@ diff -ur breakpad.org/src/processor/stackwalk_common.cc breakpad/src/processor/s
             kOutputSeparator, base_address + module->size() - 1,
             kOutputSeparator,
 -           main_module != NULL && base_address == main_address ? 1 : 0);
-+           main_module != NULL && base_address == main_address ? 1 : 0),
++           main_module != NULL && base_address == main_address ? 1 : 0,
 +           kOutputSeparator,
-+           StripSeparator(PathnameStripper::File(module->code_identifier())).c_str();
++           StripSeparator(PathnameStripper::File(module->code_identifier())).c_str());
    }
  }
  
commit 13b15e2b7285e0540769a409288d92fd46375c33
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Jun 27 04:41:57 2016 +0200

    always compile breakpad with O2
    
    Change-Id: I4cda93fee47244cf3eb7b13bb6cb2a3eab007cf0

diff --git a/external/breakpad/ExternalProject_breakpad.mk b/external/breakpad/ExternalProject_breakpad.mk
index 221a92e..ca7db24 100644
--- a/external/breakpad/ExternalProject_breakpad.mk
+++ b/external/breakpad/ExternalProject_breakpad.mk
@@ -22,7 +22,7 @@ else # !ifeq($(COM),MSC)
 
 $(call gb_ExternalProject_get_state_target,breakpad,build) :
 	$(call gb_ExternalProject_run,build,\
-		./configure \
+		CXX_FLAGS="-O2" ./configure \
 		&& $(MAKE) \
 	)
 
commit fdfe7f40fc3daa6ed0f87778c31958d8153559ed
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Jun 27 02:14:58 2016 +0200

    better use a backward compatible way to change the output
    
    Change-Id: If5829e321db8af1f09cccafaf34a18343492f514

diff --git a/external/breakpad/breakpad-stackwalk.patch.1 b/external/breakpad/breakpad-stackwalk.patch.1
index 26803f1..9a3ce95 100644
--- a/external/breakpad/breakpad-stackwalk.patch.1
+++ b/external/breakpad/breakpad-stackwalk.patch.1
@@ -1,16 +1,32 @@
 diff -ur breakpad.org/src/processor/stackwalk_common.cc breakpad/src/processor/stackwalk_common.cc
---- breakpad.org/src/processor/stackwalk_common.cc	2016-06-25 01:38:53.282302964 +0200
-+++ breakpad/src/processor/stackwalk_common.cc	2016-06-25 01:42:58.463821357 +0200
-@@ -767,9 +767,11 @@
+--- breakpad.org/src/processor/stackwalk_common.cc	2016-06-27 02:06:43.304932691 +0200
++++ breakpad/src/processor/stackwalk_common.cc	2016-06-27 02:10:22.815642476 +0200
+@@ -750,7 +750,7 @@
+ // one per line, in the following machine-readable pipe-delimited
+ // text format:
+ // Module|{Module Filename}|{Version}|{Debug Filename}|{Debug Identifier}|
+-// {Base Address}|{Max Address}|{Main}
++// {Base Address}|{Max Address}|{Main}|{Code Identifier}
+ static void PrintModulesMachineReadable(const CodeModules *modules) {
+   if (!modules)
+     return;
+@@ -767,7 +767,7 @@
         ++module_sequence) {
      const CodeModule *module = modules->GetModuleAtSequence(module_sequence);
      uint64_t base_address = module->base_address();
 -    printf("Module%c%s%c%s%c%s%c%s%c0x%08" PRIx64 "%c0x%08" PRIx64 "%c%d\n",
-+    printf("Module%c%s%c%s%c%s%c%s%c%s%c0x%08" PRIx64 "%c0x%08" PRIx64 "%c%d\n",
++    printf("Module%c%s%c%s%c%s%c%s%c0x%08" PRIx64 "%c0x%08" PRIx64 "%c%d%c%s\n",
             kOutputSeparator,
             StripSeparator(PathnameStripper::File(module->code_file())).c_str(),
-+           kOutputSeparator,
-+           StripSeparator(PathnameStripper::File(module->code_identifier())).c_str(),
             kOutputSeparator, StripSeparator(module->version()).c_str(),
+@@ -778,7 +778,9 @@
+            kOutputSeparator, base_address,
+            kOutputSeparator, base_address + module->size() - 1,
             kOutputSeparator,
-            StripSeparator(PathnameStripper::File(module->debug_file())).c_str(),
+-           main_module != NULL && base_address == main_address ? 1 : 0);
++           main_module != NULL && base_address == main_address ? 1 : 0),
++           kOutputSeparator,
++           StripSeparator(PathnameStripper::File(module->code_identifier())).c_str();
+   }
+ }
+ 
commit 243282746d11c0dd0edc42f9d43515d4ce987697
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sat Jun 25 02:10:51 2016 +0200

    add some info how to use the symbol upload script
    
    Change-Id: Ic1d1b57966661b6012efcda0b007b9e75b6be0ef
    Reviewed-on: https://gerrit.libreoffice.org/26650
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/bin/upload_symbols.py b/bin/upload_symbols.py
index d382f70..f708797 100755
--- a/bin/upload_symbols.py
+++ b/bin/upload_symbols.py
@@ -16,6 +16,7 @@ def main():
     if len(sys.argv) != 4:
         print(sys.argv)
         print("Invalid number of parameters")
+        print("Usage: upload-symbols.py symbols.zip config.ini \"long explanation\"")
         sys.exit(1)
 
     upload_url = "http://crashreport.libreoffice.org/upload/"
commit 934dcbb19dae1524a267c358bc6e516588b3e9a8
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sat Jun 25 02:03:47 2016 +0200

    add code_id to the minidump_stackwalk
    
    Change-Id: Ibcc32344780b7ad5814678cf7dd9a2167ede1661
    Reviewed-on: https://gerrit.libreoffice.org/26649
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/external/breakpad/UnpackedTarball_breakpad.mk b/external/breakpad/UnpackedTarball_breakpad.mk
index 59073eb..445047b 100644
--- a/external/breakpad/UnpackedTarball_breakpad.mk
+++ b/external/breakpad/UnpackedTarball_breakpad.mk
@@ -15,6 +15,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,breakpad,\
 	external/breakpad/breakpad-use-correct-http-header.patch.1 \
 	external/breakpad/breakpad-wshadow.patch.1 \
 	external/breakpad/breakpad-wshadow2.patch.1 \
+	external/breakpad/breakpad-stackwalk.patch.1 \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/external/breakpad/breakpad-stackwalk.patch.1 b/external/breakpad/breakpad-stackwalk.patch.1
new file mode 100644
index 0000000..26803f1
--- /dev/null
+++ b/external/breakpad/breakpad-stackwalk.patch.1
@@ -0,0 +1,16 @@
+diff -ur breakpad.org/src/processor/stackwalk_common.cc breakpad/src/processor/stackwalk_common.cc
+--- breakpad.org/src/processor/stackwalk_common.cc	2016-06-25 01:38:53.282302964 +0200
++++ breakpad/src/processor/stackwalk_common.cc	2016-06-25 01:42:58.463821357 +0200
+@@ -767,9 +767,11 @@
+        ++module_sequence) {
+     const CodeModule *module = modules->GetModuleAtSequence(module_sequence);
+     uint64_t base_address = module->base_address();
+-    printf("Module%c%s%c%s%c%s%c%s%c0x%08" PRIx64 "%c0x%08" PRIx64 "%c%d\n",
++    printf("Module%c%s%c%s%c%s%c%s%c%s%c0x%08" PRIx64 "%c0x%08" PRIx64 "%c%d\n",
+            kOutputSeparator,
+            StripSeparator(PathnameStripper::File(module->code_file())).c_str(),
++           kOutputSeparator,
++           StripSeparator(PathnameStripper::File(module->code_identifier())).c_str(),
+            kOutputSeparator, StripSeparator(module->version()).c_str(),
+            kOutputSeparator,
+            StripSeparator(PathnameStripper::File(module->debug_file())).c_str(),
commit 789e814f29e48f7a48dd488a445abfcd2d2c12df
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Jun 17 21:44:49 2016 +0200

    add some OpenGL info to the crash reporter
    
    Change-Id: Id377bc3bd814fad822d577603b1f147b71ad9ae2
    Reviewed-on: https://gerrit.libreoffice.org/26445
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/vcl/opengl/win/WinDeviceInfo.cxx b/vcl/opengl/win/WinDeviceInfo.cxx
index f68a72f..21432bd 100644
--- a/vcl/opengl/win/WinDeviceInfo.cxx
+++ b/vcl/opengl/win/WinDeviceInfo.cxx
@@ -709,8 +709,10 @@ bool WinOpenGLDeviceInfo::FindBlocklistedDeviceInList()
 
 bool WinOpenGLDeviceInfo::isDeviceBlocked()
 {
-    // CrashReporter::AddKeyAndValue("AdapterVendorId", maAdapterVendorID);
-    // CrashReporter::AddKeyAndValue("AdapterDeviceId", maAdapterDeviceID);
+    CrashReporter::AddKeyValue("OpenGLVendor", maAdapterVendorID);
+    CrashReporter::AddKeyValue("OpenGLDevice", maAdapterDeviceID);
+    CrashReporter::AddKeyValue("OpenGLDriver", maDriverVersion);
+
     SAL_INFO("vcl.opengl", maDriverVersion);
     SAL_INFO("vcl.opengl", maDriverDate);
     SAL_INFO("vcl.opengl", maDeviceID);
commit 5a31bcc39a94c9c3cbf41d5594d987e5a710cddb
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Jun 17 21:26:34 2016 +0200

    move the code for tdf#99410 to the sal init windows code
    
    Change-Id: I4ead30fa1736a3a99fb3379e89367934c8df2809
    Reviewed-on: https://gerrit.libreoffice.org/26444
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/desktop/source/app/sofficemain.cxx b/desktop/source/app/sofficemain.cxx
index d5d5b84..d1c5885 100644
--- a/desktop/source/app/sofficemain.cxx
+++ b/desktop/source/app/sofficemain.cxx
@@ -100,12 +100,6 @@ static bool dumpCallback(const wchar_t* path, const wchar_t* id,
 #endif
 extern "C" int DESKTOP_DLLPUBLIC soffice_main()
 {
-#if defined(_WIN64) && _MSC_VER <= 1800
-    // tdf#99410: MSVC 2013 runtime library has problems with some math functions if
-    // the CPU supports them and they are disabled in the OS
-    _set_FMA3_enable(0);
-#endif
-
 #if HAVE_FEATURE_BREAKPAD
 
 #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID
diff --git a/sal/osl/w32/salinit.cxx b/sal/osl/w32/salinit.cxx
index 04fab27..a03f8ae 100644
--- a/sal/osl/w32/salinit.cxx
+++ b/sal/osl/w32/salinit.cxx
@@ -55,6 +55,12 @@ extern "C" void invalidParameterHandler(
 
 void sal_detail_initialize(int argc, char ** argv)
 {
+#if defined(_WIN64) && _MSC_VER <= 1800
+    // tdf#99410: MSVC 2013 runtime library has problems with some math functions if
+    // the CPU supports them and they are disabled in the OS
+    _set_FMA3_enable(0);
+#endif
+
     sal_initGlobalTimer();
     // SetProcessDEPPolicy(PROCESS_DEP_ENABLE);
     // SetDllDirectoryW(L"");
commit 68370b1d4919c1724249f5d3829fd1997887cb02
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Jun 17 18:49:26 2016 +0200

    better message for crash report dialog
    
    Change-Id: I02903cda46809798ec7664cf620c06ea7687e54e
    Reviewed-on: https://gerrit.libreoffice.org/26443
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/svx/source/dialog/crashreportdlg.cxx b/svx/source/dialog/crashreportdlg.cxx
index 00dcedd..0d800b8 100644
--- a/svx/source/dialog/crashreportdlg.cxx
+++ b/svx/source/dialog/crashreportdlg.cxx
@@ -26,10 +26,14 @@ CrashReportDialog::CrashReportDialog(vcl::Window* pParent):
     get(mpBtnClose, "btn_close");
     get(mpEditPreUpload, "ed_pre");
     get(mpEditPostUpload, "ed_post");
+    get(mpFtBugReport, "ed_bugreport");
+
+    maSuccessMsg = mpEditPostUpload->GetText();
 
     mpBtnSend->SetClickHdl(LINK(this, CrashReportDialog, BtnHdl));
     mpBtnCancel->SetClickHdl(LINK(this, CrashReportDialog, BtnHdl));
     mpBtnClose->SetClickHdl(LINK(this, CrashReportDialog, BtnHdl));
+    mpEditPostUpload->SetReadOnly(true);
 }
 
 CrashReportDialog::~CrashReportDialog()
@@ -44,6 +48,7 @@ void CrashReportDialog::dispose()
     mpBtnClose.clear();
     mpEditPreUpload.clear();
     mpEditPostUpload.clear();
+    mpFtBugReport.clear();
 
     Dialog::dispose();
 }
@@ -72,15 +77,26 @@ IMPL_LINK_TYPED(CrashReportDialog, BtnHdl, Button*, pBtn, void)
         OUString aCrashID = OUString::createFromAscii(response.c_str());
 
         if (bSuccess)
-            mpEditPostUpload->SetText(mpEditPostUpload->GetText() + " " + aCrashID);
+        {
+            OUString aProcessedMessage = maSuccessMsg.replaceAll("%CRASHID", aCrashID.replaceAll("Crash-ID=",""));
+
+            // vclbuilder seems to replace _ with ~ even in text
+            mpEditPostUpload->SetText(aProcessedMessage.replaceAll("~", "_"));
+        }
         else
-            mpEditPostUpload->SetText(mpEditPostUpload->GetText() + " Error!");
+            mpEditPostUpload->SetText("Error!");
 
         mpBtnClose->Show();
+        mpFtBugReport->Show();
         mpEditPreUpload->Hide();
         mpEditPostUpload->Show();
         mpBtnSend->Hide();
+        mpBtnSend->Disable();
         mpBtnCancel->Hide();
+        mpBtnCancel->Disable();
+        mpBtnClose->GrabFocus();
+
+        this->setOptimalLayoutSize();
     }
     else if (pBtn == mpBtnCancel.get())
     {
diff --git a/svx/source/dialog/crashreportdlg.hxx b/svx/source/dialog/crashreportdlg.hxx
index 3ea5ab2..89f567a 100644
--- a/svx/source/dialog/crashreportdlg.hxx
+++ b/svx/source/dialog/crashreportdlg.hxx
@@ -14,6 +14,7 @@
 #include <vcl/button.hxx>
 #include <vcl/fixed.hxx>
 #include <vcl/edit.hxx>
+#include <vcl/vclmedit.hxx>
 
 class CrashReportDialog : public Dialog
 {
@@ -31,7 +32,10 @@ private:
     VclPtr<Button> mpBtnCancel;
     VclPtr<Button> mpBtnClose;
     VclPtr<FixedText> mpEditPreUpload;
-    VclPtr<FixedText> mpEditPostUpload;
+    VclPtr<VclMultiLineEdit> mpEditPostUpload;
+    VclPtr<VclMultiLineEdit> mpFtBugReport;
+
+    OUString maSuccessMsg;
 
     DECL_LINK_TYPED(BtnHdl, Button*, void);
 };
diff --git a/svx/uiconfig/ui/crashreportdlg.ui b/svx/uiconfig/ui/crashreportdlg.ui
index 0bed5a6..c148ee8 100644
--- a/svx/uiconfig/ui/crashreportdlg.ui
+++ b/svx/uiconfig/ui/crashreportdlg.ui
@@ -56,16 +56,17 @@
           <packing>
             <property name="expand">False</property>
             <property name="fill">False</property>
-            <property name="position">3</property>
+            <property name="position">4</property>
           </packing>
         </child>
         <child>
           <object class="GtkLabel" id="ed_pre">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="label" translatable="yes">We are sorry but it seems that LibreOffice crashed the last time.
-You can help us fix this issue by sending the crash report to the
-LibreOffice crash reporting server.</property>
+            <property name="label" translatable="yes">We are sorry but it seems that %PRODUCTNAME crashed the last time.
+
+You can help us fix this issue by sending the crash report to the %PRODUCTNAME crash reporting server.</property>
+            <property name="wrap">True</property>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -74,14 +75,15 @@ LibreOffice crash reporting server.</property>
           </packing>
         </child>
         <child>
-          <object class="GtkLabel" id="ed_post">
+          <object class="GtkTextView" id="ed_post">
             <property name="can_focus">False</property>
             <property name="valign">center</property>
             <property name="xalign">0</property>
             <property name="label" translatable="yes">The crash report was successfully uploaded.
-You can soon find the report on crashreport.libreoffice.org.
-The report can be found by</property>
+You can soon find the report on:
+crashreport.libreoffice.org/stats/crash_details/%CRASHID</property>
             <property name="wrap">True</property>
+            <property name="selectable">True</property>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -89,6 +91,20 @@ The report can be found by</property>
             <property name="position">1</property>
           </packing>
         </child>
+        <child>
+          <object class="GtkTextView" id="ed_bugreport">
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">Please check the report and if no bug report is connected to the crash report yet, open a new bug report at bugs.documentfoundation.org.
+Add detailed instructions on how to reproduce the crash and the shown crash ID into the crash report field.
+Thank you for your help in improving LibreOffice.</property>
+            <property name="wrap">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
       </object>
     </child>
   </object>
commit 0ebc3721d8197e51ede489c9e7bcf2c2a819673e
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Wed Jun 15 22:32:44 2016 +0200

    work around MSVCR2013 bug around AVX, tdf#99410
    
    http://crashreport.libreoffice.org/stats/crash_details/d7bc6c8a-e8c2-4c1f-8291-ccab84ea892c
    
    Change-Id: I76f9614bc54988c001c9b252707e4b5d4c588112
    Reviewed-on: https://gerrit.libreoffice.org/26339
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/desktop/source/app/sofficemain.cxx b/desktop/source/app/sofficemain.cxx
index d1c5885..d5d5b84 100644
--- a/desktop/source/app/sofficemain.cxx
+++ b/desktop/source/app/sofficemain.cxx
@@ -100,6 +100,12 @@ static bool dumpCallback(const wchar_t* path, const wchar_t* id,
 #endif
 extern "C" int DESKTOP_DLLPUBLIC soffice_main()
 {
+#if defined(_WIN64) && _MSC_VER <= 1800
+    // tdf#99410: MSVC 2013 runtime library has problems with some math functions if
+    // the CPU supports them and they are disabled in the OS
+    _set_FMA3_enable(0);
+#endif
+
 #if HAVE_FEATURE_BREAKPAD
 
 #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID
commit 60bf8e8b99c2cd895452718e97f6bf6e2b450cf3
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Wed Jun 15 20:15:20 2016 +0200

    passing a NULL pointer to fileno is not allowed
    
    See crash reports at
    http://crashreport.libreoffice.org/stats/signature/do_msvcr_magic+0x7
    and documentation at
    https://msdn.microsoft.com/en-us/library/zs6wbdhx.aspx
    
    Change-Id: Ia9166d3b9fa10b87585821504e39cdfecbd22eda
    Reviewed-on: https://gerrit.libreoffice.org/26317
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
index 0007975..1a56cd7 100644
--- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
+++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
@@ -558,6 +558,9 @@ static void do_msvcr_magic(rtl_uString *jvm_dll)
 
     FILE *f = _wfopen(reinterpret_cast<LPCWSTR>(Module->buffer), L"rb");
 
+    if (!f)
+        return;
+
     if (fstat(fileno(f), &st) == -1)
     {
         fclose(f);
commit 7ba1d7f736ad6371011efad77b259b734d209e8e
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Jun 13 01:20:08 2016 +0200

    we are using our own minidump_upload executable
    
    Change-Id: Icee770ff8e2db019031d618528a9aab83041389d
    Reviewed-on: https://gerrit.libreoffice.org/26244
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index 08e53c7..0c537b9 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -3461,10 +3461,6 @@ endif
 
 $(call gb_LinkTarget_use_external_project,$(1),breakpad)
 
-$(eval $(call gb_Helper_register_packages_for_install,ooo,\
-	breakpad \
-))
-
 endef
 
 endif # ENABLE_BREAKPAD
diff --git a/external/breakpad/ExternalPackage_breakpad.mk b/external/breakpad/ExternalPackage_breakpad.mk
deleted file mode 100644
index 6c0d0bf..0000000
--- a/external/breakpad/ExternalPackage_breakpad.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_ExternalPackage_ExternalPackage,breakpad,breakpad))
-
-$(eval $(call gb_ExternalPackage_use_external_project,breakpad,breakpad))
-
-ifeq ($(OS),LINUX)
-$(eval $(call gb_ExternalPackage_add_file,breakpad,$(LIBO_LIB_FOLDER)/minidump_upload,src/tools/linux/symupload/minidump_upload))
-else ifeq ($(OS)),WNT)
-$(eval $(call gb_ExternalPackage_add_file,breakpad,$(LIBO_LIB_FOLDER)/minidump_upload,src/tools/linux/symupload/minidump_upload))
-endif
-
-# vim: set noet sw=4 ts=4:
commit 9f3f8cbf761304c871b9f494930b67d864ed3751
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sun Jun 5 22:34:26 2016 +0200

    enable breakpad in distro configs
    
    Change-Id: Ib321a62223c77e3f62d48f358a228465280458ad
    Reviewed-on: https://gerrit.libreoffice.org/26022
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/distro-configs/LibreOfficeLinux.conf b/distro-configs/LibreOfficeLinux.conf
index 0866baa..1d154e4 100644
--- a/distro-configs/LibreOfficeLinux.conf
+++ b/distro-configs/LibreOfficeLinux.conf
@@ -36,5 +36,5 @@
 --disable-gio
 --disable-randr-link
 --disable-kde4
---enable-mergelibs
 --enable-breakpad
+--enable-mergelibs
diff --git a/distro-configs/LibreOfficeWin32.conf b/distro-configs/LibreOfficeWin32.conf
index c231ccd..a2cbff9 100644
--- a/distro-configs/LibreOfficeWin32.conf
+++ b/distro-configs/LibreOfficeWin32.conf
@@ -8,6 +8,7 @@
 --enable-ext-nlpsolver
 --enable-online-update
 --enable-win-mozab-driver
+--enable-breakpad
 --with-help
 --with-myspell-dicts
 --with-package-format=msi
diff --git a/distro-configs/LibreOfficeWin64.conf b/distro-configs/LibreOfficeWin64.conf
index cc8211f..99d6beb 100644
--- a/distro-configs/LibreOfficeWin64.conf
+++ b/distro-configs/LibreOfficeWin64.conf
@@ -9,6 +9,7 @@
 --enable-ext-nlpsolver
 --enable-online-update
 --disable-firebird-sdbc
+--enable-breakpad
 --with-help
 --with-myspell-dicts
 --with-package-format=msi
commit b5a8517adb95239bdc6ae99a5049341d249a9beb
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sun Jun 5 22:26:25 2016 +0200

    remove old debug output
    
    Change-Id: Icf0e38c6725a129d3afb22b1cc79f72071c8e919
    Reviewed-on: https://gerrit.libreoffice.org/25934
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/desktop/source/minidump/minidump.cxx b/desktop/source/minidump/minidump.cxx
index 0075ca9..135b24a 100644
--- a/desktop/source/minidump/minidump.cxx
+++ b/desktop/source/minidump/minidump.cxx
@@ -11,7 +11,6 @@
 
 #include <map>
 #include <memory>
-#include <iostream>
 #include <fstream>
 #include <sstream>
 
@@ -162,8 +161,6 @@ bool uploadContent(std::map<std::string, std::string>& parameters, std::string&
                 curl_easy_strerror(cc));
 #endif
 
-    const char* error_description = curl_easy_strerror(cc);
-
     if (formpost != nullptr)
     {
         curl_formfree(formpost);
@@ -173,8 +170,6 @@ bool uploadContent(std::map<std::string, std::string>& parameters, std::string&
         curl_slist_free_all(headerlist);
     }
 
-    std::cerr << response_body << " " << error_description << std::endl;
-
     response = response_body;
 
     if( CURLE_OK != cc )
@@ -191,13 +186,13 @@ bool readConfig(const std::string& iniPath, std::string& response)
     // make sure that at least the mandatory parameters are in there
     if (parameters.find("DumpFile") == parameters.end())
     {
-        std::cerr << "ini file needs to contain a key DumpFile!";
+        response = "ini file needs to contain a key DumpFile!";
         return false;
     }
 
     if (parameters.find("Version") == parameters.end())
     {
-        std::cerr << "ini file needs to contain a key Version!";
+        response = "ini file needs to contain a key Version!";
         return false;
     }
 
commit c8fd6d6e6d050edcee8662ed350d4120d5e700b2
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Jun 3 13:26:46 2016 +0200

    report the crash id back to the user
    
    Change-Id: I5cc1e698294a5674d691529af8cc14e4cd87a711
    Reviewed-on: https://gerrit.libreoffice.org/25865
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/desktop/source/minidump/minidump.cxx b/desktop/source/minidump/minidump.cxx
index c0d68c2..0075ca9 100644
--- a/desktop/source/minidump/minidump.cxx
+++ b/desktop/source/minidump/minidump.cxx
@@ -82,7 +82,7 @@ std::string generate_json(const std::map<std::string, std::string>& parameters)
     return stream.str();
 }
 
-bool uploadContent(std::map<std::string, std::string>& parameters)
+bool uploadContent(std::map<std::string, std::string>& parameters, std::string& response)
 {
     CURL* curl = curl_easy_init();
     if (!curl)
@@ -175,6 +175,7 @@ bool uploadContent(std::map<std::string, std::string>& parameters)
 
     std::cerr << response_body << " " << error_description << std::endl;
 
+    response = response_body;
 
     if( CURLE_OK != cc )
         return false;
@@ -182,7 +183,7 @@ bool uploadContent(std::map<std::string, std::string>& parameters)
     return true;
 }
 
-bool readConfig(const std::string& iniPath)
+bool readConfig(const std::string& iniPath, std::string& response)
 {
     std::ifstream file(iniPath);
     std::map<std::string, std::string> parameters = readStrings(file);
@@ -200,7 +201,7 @@ bool readConfig(const std::string& iniPath)
         return false;
     }
 
-    return uploadContent(parameters);
+    return uploadContent(parameters, response);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/desktop/source/minidump/minidump_upload.cxx b/desktop/source/minidump/minidump_upload.cxx
index 6a581db..934f1ad 100644
--- a/desktop/source/minidump/minidump_upload.cxx
+++ b/desktop/source/minidump/minidump_upload.cxx
@@ -20,9 +20,11 @@ int main(int argc, char** argv)
     }
 
     std::string iniPath(argv[1]);
-    if (!readConfig(iniPath))
+    std::string response;
+    if (!readConfig(iniPath, response))
         return EXIT_FAILURE;
 
+    std::cout << "Response: " << response << std::endl;
     return EXIT_SUCCESS;
 }
 
diff --git a/include/desktop/minidump.hxx b/include/desktop/minidump.hxx
index 21d52e8..bdd91b2 100644
--- a/include/desktop/minidump.hxx
+++ b/include/desktop/minidump.hxx
@@ -12,7 +12,7 @@
 
 #include <string>
 
-bool readConfig(const std::string& iniPath);
+bool readConfig(const std::string& iniPath, std::string& response);
 
 #endif
 
diff --git a/svx/source/dialog/crashreportdlg.cxx b/svx/source/dialog/crashreportdlg.cxx
index 90c5c10..00dcedd 100644
--- a/svx/source/dialog/crashreportdlg.cxx
+++ b/svx/source/dialog/crashreportdlg.cxx
@@ -23,9 +23,13 @@ CrashReportDialog::CrashReportDialog(vcl::Window* pParent):
 {
     get(mpBtnSend, "btn_send");
     get(mpBtnCancel, "btn_cancel");
+    get(mpBtnClose, "btn_close");
+    get(mpEditPreUpload, "ed_pre");
+    get(mpEditPostUpload, "ed_post");
 
     mpBtnSend->SetClickHdl(LINK(this, CrashReportDialog, BtnHdl));
     mpBtnCancel->SetClickHdl(LINK(this, CrashReportDialog, BtnHdl));
+    mpBtnClose->SetClickHdl(LINK(this, CrashReportDialog, BtnHdl));
 }
 
 CrashReportDialog::~CrashReportDialog()
@@ -37,6 +41,9 @@ void CrashReportDialog::dispose()
 {
     mpBtnSend.clear();
     mpBtnCancel.clear();
+    mpBtnClose.clear();
+    mpEditPreUpload.clear();
+    mpEditPostUpload.clear();
 
     Dialog::dispose();
 }
@@ -58,17 +65,30 @@ IMPL_LINK_TYPED(CrashReportDialog, BtnHdl, Button*, pBtn, void)
     if (pBtn == mpBtnSend.get())
     {
         std::string ini_path = CrashReporter::getIniFileName();
-        readConfig(ini_path);
-        // TODO: moggi: return the id for the user to look it up
-        Close();
+
+        std::string response;
+        bool bSuccess = readConfig(ini_path, response);
+
+        OUString aCrashID = OUString::createFromAscii(response.c_str());
+
+        if (bSuccess)
+            mpEditPostUpload->SetText(mpEditPostUpload->GetText() + " " + aCrashID);
+        else
+            mpEditPostUpload->SetText(mpEditPostUpload->GetText() + " Error!");
+
+        mpBtnClose->Show();
+        mpEditPreUpload->Hide();
+        mpEditPostUpload->Show();
+        mpBtnSend->Hide();
+        mpBtnCancel->Hide();
     }
     else if (pBtn == mpBtnCancel.get())
     {
         Close();
     }
-    else
+    else if (pBtn == mpBtnClose.get())
     {
-        assert(false);
+        Close();
     }
 }
 
diff --git a/svx/source/dialog/crashreportdlg.hxx b/svx/source/dialog/crashreportdlg.hxx
index e6041f8..3ea5ab2 100644
--- a/svx/source/dialog/crashreportdlg.hxx
+++ b/svx/source/dialog/crashreportdlg.hxx
@@ -12,6 +12,8 @@
 
 #include <vcl/dialog.hxx>
 #include <vcl/button.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/edit.hxx>
 
 class CrashReportDialog : public Dialog
 {
@@ -27,6 +29,9 @@ private:
 
     VclPtr<Button> mpBtnSend;
     VclPtr<Button> mpBtnCancel;
+    VclPtr<Button> mpBtnClose;
+    VclPtr<FixedText> mpEditPreUpload;
+    VclPtr<FixedText> mpEditPostUpload;
 
     DECL_LINK_TYPED(BtnHdl, Button*, void);
 };
diff --git a/svx/uiconfig/ui/crashreportdlg.ui b/svx/uiconfig/ui/crashreportdlg.ui
index e8d1355..0bed5a6 100644
--- a/svx/uiconfig/ui/crashreportdlg.ui
+++ b/svx/uiconfig/ui/crashreportdlg.ui
@@ -40,15 +40,27 @@
                 <property name="position">1</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkButton" id="btn_close">
+                <property name="label" translatable="yes">Close</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
             <property name="fill">False</property>
-            <property name="position">0</property>
+            <property name="position">3</property>
           </packing>
         </child>
         <child>
-          <object class="GtkLabel" id="label1">
+          <object class="GtkLabel" id="ed_pre">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="label" translatable="yes">We are sorry but it seems that LibreOffice crashed the last time.
@@ -58,10 +70,27 @@ LibreOffice crash reporting server.</property>
           <packing>
             <property name="expand">False</property>
             <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="ed_post">
+            <property name="can_focus">False</property>
+            <property name="valign">center</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">The crash report was successfully uploaded.
+You can soon find the report on crashreport.libreoffice.org.
+The report can be found by</property>
+            <property name="wrap">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
       </object>
     </child>
   </object>
+  <object class="GtkActionGroup" id="actiongroup1"/>
 </interface>
commit 407dfa141e594f2294ca807c0c6cb9dc8f1b4360
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Jun 3 12:38:14 2016 +0200

    don't just silently ignore the return value
    
    Change-Id: Ia65c29b61e78de4b908b11cd803d93da4b7e3a2d
    Reviewed-on: https://gerrit.libreoffice.org/25864
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/desktop/source/minidump/minidump.cxx b/desktop/source/minidump/minidump.cxx
index 64303d4..c0d68c2 100644
--- a/desktop/source/minidump/minidump.cxx
+++ b/desktop/source/minidump/minidump.cxx
@@ -200,9 +200,7 @@ bool readConfig(const std::string& iniPath)
         return false;
     }
 
-    uploadContent(parameters);
-
-    return true;
+    return uploadContent(parameters);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 2578d4506c73cd5a92360ac22fd31e699aab3e97
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Jun 3 12:37:18 2016 +0200

    integrate the minidump upload into the normal LibreOffice
    
    Change-Id: Id1808ceebf6c54698f7d1656a0ce96bcaece89ac
    Reviewed-on: https://gerrit.libreoffice.org/25863
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/desktop/source/minidump/minidump.cxx b/desktop/source/minidump/minidump.cxx
index 371d17c..64303d4 100644
--- a/desktop/source/minidump/minidump.cxx
+++ b/desktop/source/minidump/minidump.cxx
@@ -7,7 +7,7 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include "minidump.hxx"
+#include <desktop/minidump.hxx>
 
 #include <map>
 #include <memory>
diff --git a/desktop/source/minidump/minidump_upload.cxx b/desktop/source/minidump/minidump_upload.cxx
index 7f8d617..6a581db 100644
--- a/desktop/source/minidump/minidump_upload.cxx
+++ b/desktop/source/minidump/minidump_upload.cxx
@@ -7,9 +7,9 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include "minidump.hxx"
+#include <desktop/minidump.hxx>
 
-#include<iostream>
+#include <iostream>
 
 int main(int argc, char** argv)
 {
diff --git a/desktop/source/minidump/minidump.hxx b/include/desktop/minidump.hxx
similarity index 100%
rename from desktop/source/minidump/minidump.hxx
rename to include/desktop/minidump.hxx
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk
index 2588352..87e37cb 100644
--- a/svx/Library_svx.mk
+++ b/svx/Library_svx.mk
@@ -40,6 +40,14 @@ $(eval $(call gb_Library_add_defs,svx,\
 
 $(eval $(call gb_Library_set_precompiled_header,svx,$(SRCDIR)/svx/inc/pch/precompiled_svx))
 
+ifeq ($(ENABLE_BREAKPAD),TRUE)
+
+$(eval $(call gb_Library_use_static_libraries,svx, \
+	minidump \
+))
+
+endif
+
 $(eval $(call gb_Library_use_libraries,svx,\
     basegfx \
     sb \
@@ -75,6 +83,8 @@ $(eval $(call gb_Library_use_libraries,svx,\
 
 $(eval $(call gb_Library_use_externals,svx,\
 	boost_headers \
+    $(call gb_Helper_optional,BREAKPAD, \
+		curl) \
 	icuuc \
 	icu_headers \
 ))
diff --git a/svx/source/dialog/crashreportdlg.cxx b/svx/source/dialog/crashreportdlg.cxx
index aeb5c14..90c5c10 100644
--- a/svx/source/dialog/crashreportdlg.cxx
+++ b/svx/source/dialog/crashreportdlg.cxx
@@ -9,10 +9,12 @@
 
 #include "crashreportdlg.hxx"
 
+
 #include <config_folders.h>
 
 #include <rtl/bootstrap.hxx>
 #include <desktop/crashreport.hxx>
+#include <desktop/minidump.hxx>
 #include <osl/file.hxx>
 
 CrashReportDialog::CrashReportDialog(vcl::Window* pParent):
@@ -56,13 +58,7 @@ IMPL_LINK_TYPED(CrashReportDialog, BtnHdl, Button*, pBtn, void)
     if (pBtn == mpBtnSend.get())
     {
         std::string ini_path = CrashReporter::getIniFileName();
-        OUString aCommand;
-        osl::FileBase::getSystemPathFromFileURL(getLibDir() + "/minidump_upload" + SAL_EXEEXTENSION, aCommand);
-
-        aCommand = aCommand;
-        OString aOStringCommand = rtl::OUStringToOString(aCommand, RTL_TEXTENCODING_UTF8) + " " + ini_path.c_str();
-        int retVal = std::system(aOStringCommand.getStr());
-        SAL_WARN_IF(retVal != 0, "svx.dialog", "Failed to upload minidump. Error Code: " << retVal);
+        readConfig(ini_path);
         // TODO: moggi: return the id for the user to look it up
         Close();
     }
commit 2bc740b9a077da4b50ef9265ab898704d8d82bc1
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Thu Jun 2 19:15:47 2016 +0200

    extract the minidump uploader code into a static lib
    
    The plan for the near future is to still ship the executable but replace
    the interal use if possible with using the static library.
    
    At some point when it is not needed for debugging anymore and everything
    works correctly we should only build the uploader executable in dev
    configurations. The huge disadvantage of the interal solution is that it
    is nearly impossible for a user to upload a crash report if LibO starts
    working correctly. Also LibO overwrites the file with the information
    after the upload whereas the executable does not.
    
    Change-Id: Ib9854946be3a34e580964c18e1a9c0cce16221d1
    Reviewed-on: https://gerrit.libreoffice.org/25862
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/desktop/Executable_minidump_upload.mk b/desktop/Executable_minidump_upload.mk
index 7fe9546..2c02023 100644
--- a/desktop/Executable_minidump_upload.mk
+++ b/desktop/Executable_minidump_upload.mk
@@ -13,6 +13,10 @@ $(eval $(call gb_Executable_use_libraries,minidump_upload,\
     sal \
 ))
 
+$(eval $(call gb_Executable_use_static_libraries,minidump_upload,\
+	minidump \
+))
+
 $(eval $(call gb_Executable_use_external,minidump_upload,curl))
 
 $(eval $(call gb_Executable_add_exception_objects,minidump_upload,\
diff --git a/desktop/Module_desktop.mk b/desktop/Module_desktop.mk
index bfe61a1..c16bfe8 100644
--- a/desktop/Module_desktop.mk
+++ b/desktop/Module_desktop.mk
@@ -17,7 +17,9 @@ $(eval $(call gb_Module_add_targets,desktop,\
     Library_deploymentmisc \
     Library_offacc \
     Library_sofficeapp \
-    $(if $(ENABLE_BREAKPAD),Library_crashreport) \
+    $(if $(ENABLE_BREAKPAD), \
+        Library_crashreport \
+        StaticLibrary_minidump) \
     $(if $(ENABLE_HEADLESS),,Library_spl) \
     Package_branding \
     $(if $(CUSTOM_BRAND_DIR),Package_branding_custom) \
diff --git a/desktop/StaticLibrary_minidump.mk b/desktop/StaticLibrary_minidump.mk
new file mode 100644
index 0000000..70cab1a
--- /dev/null
+++ b/desktop/StaticLibrary_minidump.mk
@@ -0,0 +1,19 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_StaticLibrary_StaticLibrary,minidump))
+
+$(eval $(call gb_StaticLibrary_use_external,minidump,curl))
+
+$(eval $(call gb_StaticLibrary_add_exception_objects,minidump,\
+    desktop/source/minidump/minidump \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/desktop/source/minidump/minidump.cxx b/desktop/source/minidump/minidump.cxx
new file mode 100644
index 0000000..371d17c
--- /dev/null
+++ b/desktop/source/minidump/minidump.cxx
@@ -0,0 +1,208 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "minidump.hxx"
+
+#include <map>
+#include <memory>
+#include <iostream>
+#include <fstream>
+#include <sstream>
+
+#include <curl/curl.h>
+
+static const char kUserAgent[] = "Breakpad/1.0 (Linux)";
+
+std::map<std::string, std::string> readStrings(std::istream& file)
+{
+    std::map<std::string, std::string> parameters;
+
+    while (!file.eof())
+    {
+        std::string line;
+        std::getline(file, line);
+        int sep = line.find('=');
+        if (sep >= 0)
+        {
+            std::string key = line.substr(0, sep);
+            std::string value = line.substr(sep + 1);
+            parameters[key] = value;
+        }
+    }
+
+    return parameters;
+}
+
+// Callback to get the response data from server.
+static size_t WriteCallback(void *ptr, size_t size,
+                            size_t nmemb, void *userp)
+{
+  if (!userp)
+    return 0;
+
+  std::string* response = static_cast<std::string *>(userp);
+  size_t real_size = size * nmemb;
+  response->append(static_cast<char *>(ptr), real_size);
+  return real_size;
+}
+
+void getProperty(const std::string& key, std::string& value,
+        std::map<std::string, std::string>& parameters)
+{
+    auto itr = parameters.find(key);
+    if (itr != parameters.end())
+    {
+        value = itr->second;
+        parameters.erase(itr);
+    }
+}
+
+std::string generate_json(const std::map<std::string, std::string>& parameters)
+{
+    std::ostringstream stream;
+    stream << "{\n";
+    bool first = true;
+    for (auto itr = parameters.begin(), itrEnd = parameters.end(); itr != itrEnd; ++itr)
+    {
+        if (!first)
+        {
+            stream << ",\n";
+        }
+        first = false;
+        stream << "\"" << itr->first << "\": \"" << itr->second << "\"";
+    }
+    stream << "\n}";
+
+    return stream.str();
+}
+
+bool uploadContent(std::map<std::string, std::string>& parameters)
+{
+    CURL* curl = curl_easy_init();
+    if (!curl)
+        return false;
+
+    std::string proxy, proxy_user_pwd, ca_certificate_file, file, url, version;
+
+    getProperty("Proxy", proxy, parameters);
+    getProperty("ProxyUserPW", proxy_user_pwd, parameters);
+    getProperty("CAFile", ca_certificate_file, parameters);
+
+    getProperty("DumpFile", file, parameters);
+    getProperty("URL", url, parameters);
+    getProperty("Version", version, parameters);
+    if (url.empty())
+        return false;
+
+    if (file.empty())
+        return false;
+
+    if (version.empty())
+        return false;
+
+    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
+    curl_easy_setopt(curl, CURLOPT_USERAGENT, kUserAgent);
+    // Set proxy information if necessary.
+    if (!proxy.empty())
+        curl_easy_setopt(curl, CURLOPT_PROXY, proxy.c_str());
+    if (!proxy_user_pwd.empty())
+        curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_pwd.c_str());
+
+    if (!ca_certificate_file.empty())
+        curl_easy_setopt(curl, CURLOPT_CAINFO, ca_certificate_file.c_str());
+
+    curl_httppost* formpost = nullptr;
+    curl_httppost* lastptr = nullptr;
+    std::string additional_data = generate_json(parameters);
+    curl_formadd(&formpost, &lastptr,
+            CURLFORM_COPYNAME, "AdditionalData",
+            CURLFORM_COPYCONTENTS, additional_data.c_str(),
+            CURLFORM_END);
+
+    curl_formadd(&formpost, &lastptr,
+            CURLFORM_COPYNAME, "Version",
+            CURLFORM_COPYCONTENTS, version.c_str(),
+            CURLFORM_END);
+
+    std::string response_body;
+    long response_code;
+    curl_formadd(&formpost, &lastptr,
+            CURLFORM_COPYNAME, "upload_file_minidump",
+            CURLFORM_FILE, file.c_str(),
+            CURLFORM_END);
+
+    curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
+
+
+    // Disable 100-continue header.
+    char buf[] = "Expect:";
+    curl_slist* headerlist = nullptr;
+    headerlist = curl_slist_append(headerlist, buf);
+    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
+
+    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
+    curl_easy_setopt(curl, CURLOPT_WRITEDATA,
+            static_cast<void *>(&response_body));
+
+    // Fail if 400+ is returned from the web server.
+    curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
+
+    CURLcode cc = curl_easy_perform(curl);
+    curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
+#ifndef NDEBUG
+    if (cc != CURLE_OK)
+        fprintf(stderr, "Failed to send http request to %s, error: %s\n",
+                url.c_str(),
+                curl_easy_strerror(cc));
+#endif
+
+    const char* error_description = curl_easy_strerror(cc);
+
+    if (formpost != nullptr)
+    {
+        curl_formfree(formpost);
+    }
+    if (headerlist != nullptr)
+    {
+        curl_slist_free_all(headerlist);
+    }
+
+    std::cerr << response_body << " " << error_description << std::endl;
+
+
+    if( CURLE_OK != cc )
+        return false;
+
+    return true;
+}
+
+bool readConfig(const std::string& iniPath)
+{
+    std::ifstream file(iniPath);
+    std::map<std::string, std::string> parameters = readStrings(file);
+
+    // make sure that at least the mandatory parameters are in there
+    if (parameters.find("DumpFile") == parameters.end())
+    {
+        std::cerr << "ini file needs to contain a key DumpFile!";
+        return false;
+    }
+
+    if (parameters.find("Version") == parameters.end())
+    {
+        std::cerr << "ini file needs to contain a key Version!";
+        return false;
+    }
+
+    uploadContent(parameters);
+
+    return true;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/desktop/source/minidump/minidump.hxx b/desktop/source/minidump/minidump.hxx
new file mode 100644
index 0000000..21d52e8
--- /dev/null
+++ b/desktop/source/minidump/minidump.hxx
@@ -0,0 +1,19 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_DESKTOP_MINIDUMP_MINIDUMP_HXX
+#define INCLUDED_DESKTOP_MINIDUMP_MINIDUMP_HXX
+
+#include <string>
+
+bool readConfig(const std::string& iniPath);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/desktop/source/minidump/minidump_upload.cxx b/desktop/source/minidump/minidump_upload.cxx
index 597580d..7f8d617 100644
--- a/desktop/source/minidump/minidump_upload.cxx
+++ b/desktop/source/minidump/minidump_upload.cxx
@@ -7,189 +7,11 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include <string>
-#include <map>
-#include <memory>
-#include <iostream>
-#include <fstream>
+#include "minidump.hxx"
 
-#include <curl/curl.h>
+#include<iostream>
 
-static const char kUserAgent[] = "Breakpad/1.0 (Linux)";
-
-std::map<std::string, std::string> readStrings(std::istream& file)
-{
-    std::map<std::string, std::string> parameters;
-
-
-    while (!file.eof())
-    {
-        std::string line;
-        std::getline(file, line);
-        int sep = line.find('=');
-        if (sep >= 0)
-        {
-            std::string key = line.substr(0, sep);
-            std::string value = line.substr(sep + 1);
-            parameters[key] = value;
-        }
-    }
-
-    return parameters;
-}
-
-// Callback to get the response data from server.
-static size_t WriteCallback(void *ptr, size_t size,
-                            size_t nmemb, void *userp)
-{
-  if (!userp)
-    return 0;
-
-  std::string* response = reinterpret_cast<std::string *>(userp);
-  size_t real_size = size * nmemb;
-  response->append(reinterpret_cast<char *>(ptr), real_size);
-  return real_size;
-}
-
-void getProperty(const std::string& key, std::string& value,
-        std::map<std::string, std::string>& parameters)
-{
-    auto itr = parameters.find(key);
-    if (itr != parameters.end())
-    {
-        value = itr->second;
-        parameters.erase(itr);
-    }
-}
-
-bool uploadContent(std::map<std::string, std::string>& parameters)
-{
-    CURL* curl = curl_easy_init();
-    if (!curl)
-        return false;
-
-    std::string proxy, proxy_user_pwd, ca_certificate_file, file, url;
-
-    getProperty("Proxy", proxy, parameters);
-    getProperty("ProxyUserPW", proxy_user_pwd, parameters);
-    getProperty("CAFile", ca_certificate_file, parameters);
-
-    getProperty("DumpFile", file, parameters);
-    getProperty("URL", url, parameters);
-    if (url.empty())
-        return false;
-
-    if (file.empty())
-        return false;
-
-    if (version.empty())
-        return false;
-
-    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
-    curl_easy_setopt(curl, CURLOPT_USERAGENT, kUserAgent);
-    // Set proxy information if necessary.
-    if (!proxy.empty())
-        curl_easy_setopt(curl, CURLOPT_PROXY, proxy.c_str());
-    if (!proxy_user_pwd.empty())
-        curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_pwd.c_str());
-
-    if (!ca_certificate_file.empty())
-        curl_easy_setopt(curl, CURLOPT_CAINFO, ca_certificate_file.c_str());
-
-    curl_httppost* formpost = nullptr;
-    curl_httppost* lastptr = nullptr;
-    for (auto itr = parameters.begin(), itEnd = parameters.end(); itr != itEnd; ++itr)
-    {
-        curl_formadd(&formpost, &lastptr,
-                CURLFORM_COPYNAME, itr->first.c_str(),
-                CURLFORM_COPYCONTENTS, itr->second.c_str(),
-                CURLFORM_END);
-    }
-
-    std::string response_body;
-    long response_code;
-    curl_formadd(&formpost, &lastptr,
-            CURLFORM_COPYNAME, "upload_file_minidump",
-            CURLFORM_FILE, file.c_str(),
-            CURLFORM_END);
-
-    curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
-
-
-    // Disable 100-continue header.
-    char buf[] = "Expect:";
-    curl_slist* headerlist = NULL;
-    headerlist = curl_slist_append(headerlist, buf);
-    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
-
-    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
-    curl_easy_setopt(curl, CURLOPT_WRITEDATA,
-            reinterpret_cast<void *>(&response_body));
-
-    // Fail if 400+ is returned from the web server.
-    curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
-
-    CURLcode cc = curl_easy_perform(curl);
-    curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
-#ifndef NDEBUG
-    if (cc != CURLE_OK)
-        fprintf(stderr, "Failed to send http request to %s, error: %s\n",
-                url.c_str(),
-                curl_easy_strerror(cc));
-#endif
-
-    const char* error_description = curl_easy_strerror(cc);
-
-    if (formpost != NULL)
-    {
-        curl_formfree(formpost);
-    }
-    if (headerlist != NULL)
-    {
-        curl_slist_free_all(headerlist);
-    }
-
-    std::cerr << response_body << " " << error_description << std::endl;
-
-
-    if( CURLE_OK != cc )
-        return false;
-
-    return true;
-}
-
-bool readConfig(char** argv)
-{
-    std::string iniPath = argv[1];
-
-    std::ifstream file(iniPath);
-    std::map<std::string, std::string> parameters = readStrings(file);
-
-    // make sure that at least the mandatory parameters are in there
-    if (parameters.find("DumpFile") == parameters.end())
-    {
-        std::cerr << "ini file needs to contain a key DumpFile!";
-        return false;
-    }
-
-    if (parameters.find("Version") == parameters.end())
-    {
-        std::cerr << "ini file needs to contain a key Version!";
-        return false;
-    }
-
-    if (parameters.find("ProductName") == parameters.end())
-    {
-        std::cerr << "ini file needs to contain a ket ProductName!";
-        return false;
-    }
-
-    uploadContent(parameters);
-
-    return true;
-}
-
-int main(int argc, char* argv[])
+int main(int argc, char** argv)
 {
     if (argc < 2)
     {
@@ -197,7 +19,8 @@ int main(int argc, char* argv[])
         return EXIT_FAILURE;
     }
 
-    if (!readConfig(argv))
+    std::string iniPath(argv[1]);
+    if (!readConfig(iniPath))
         return EXIT_FAILURE;
 
     return EXIT_SUCCESS;
commit d1c6921143cb5308aaba9eb4f0a4559affbedc5c
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Thu Jun 2 17:04:27 2016 +0200

    add some more error checking to minidump uploader
    
    Change-Id: Ia06fec80ea67e88b8c26cdeb5bfc9cee2459ad4a
    Reviewed-on: https://gerrit.libreoffice.org/25861
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/desktop/source/minidump/minidump_upload.cxx b/desktop/source/minidump/minidump_upload.cxx
index 24039e5..597580d 100644
--- a/desktop/source/minidump/minidump_upload.cxx
+++ b/desktop/source/minidump/minidump_upload.cxx
@@ -79,6 +79,12 @@ bool uploadContent(std::map<std::string, std::string>& parameters)
     if (url.empty())
         return false;
 
+    if (file.empty())
+        return false;
+
+    if (version.empty())
+        return false;
+
     curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
     curl_easy_setopt(curl, CURLOPT_USERAGENT, kUserAgent);
     // Set proxy information if necessary.
commit 4763583079fecd3fc208c76b483beb7843b22928
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon May 30 05:51:36 2016 +0200

    use the existing url to path function also in the ini file part
    
    Change-Id: Ia92261a63cfe1d51f68f312a27d5ba4b42719c47
    Reviewed-on: https://gerrit.libreoffice.org/25647
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/desktop/source/app/crashreport.cxx b/desktop/source/app/crashreport.cxx
index b8e0127..c1d57de 100644
--- a/desktop/source/app/crashreport.cxx
+++ b/desktop/source/app/crashreport.cxx
@@ -60,11 +60,9 @@ OUString getCrashUserProfileDirectory()
     rtl::Bootstrap::expandMacros(url);
     osl::Directory::create(url);
 
-#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID
-    return url.copy(7);
-#elif defined WNT
-    return url.copy(8);
-#endif
+    OUString aProfilePath;
+    osl::FileBase::getSystemPathFromFileURL(url, aProfilePath);
+    return aProfilePath;
 }
 
 }
commit 403d3fe2f66332f84e9c42833456c86e24164ded
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sun May 29 12:15:18 2016 +0200

    use the existing URL to path tools
    
    Change-Id: I20aa47556205f5efc70f8f5ea39c63009110f986
    Reviewed-on: https://gerrit.libreoffice.org/25646
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/include/sal/config.h b/include/sal/config.h
index e891a6b..48119cc 100644
--- a/include/sal/config.h
+++ b/include/sal/config.h
@@ -29,6 +29,7 @@
 #ifdef WIN32
 #define SAL_W32
 #define SAL_DLLEXTENSION ".dll"
+#define SAL_EXEEXTENSION ".exe"
 #define SAL_PATHSEPARATOR ';'
 #define SAL_PATHDELIMITER '\\'
 #define SAL_NEWLINE_STRING "\r\n"
@@ -56,6 +57,7 @@
     defined(AIX) || defined(OPENBSD) || defined(DRAGONFLY) || defined(ANDROID)
 #define SAL_UNX
 #define SAL_DLLEXTENSION ".so"
+#define SAL_EXEEXTENSION ""
 #define SAL_DLLPREFIX "lib"
 #define SAL_PATHSEPARATOR ':'
 #define SAL_PATHDELIMITER '/'
@@ -66,6 +68,7 @@
 #ifdef MACOSX
 #define SAL_UNX
 #define SAL_DLLEXTENSION ".dylib"
+#define SAL_EXEEXTENSION ""
 #define SAL_DLLPREFIX "lib"
 #define SAL_PATHSEPARATOR ':'
 #define SAL_PATHDELIMITER '/'
diff --git a/svx/source/dialog/crashreportdlg.cxx b/svx/source/dialog/crashreportdlg.cxx
index 730dff5..aeb5c14 100644
--- a/svx/source/dialog/crashreportdlg.cxx
+++ b/svx/source/dialog/crashreportdlg.cxx
@@ -13,6 +13,7 @@
 
 #include <rtl/bootstrap.hxx>
 #include <desktop/crashreport.hxx>
+#include <osl/file.hxx>
 
 CrashReportDialog::CrashReportDialog(vcl::Window* pParent):
     Dialog(pParent, "CrashReportDialog",
@@ -40,12 +41,12 @@ void CrashReportDialog::dispose()
 
 namespace {
 
-OString getLibDir()
+OUString getLibDir()
 {
     OUString aOriginal = "$BRAND_BASE_DIR/" LIBO_LIBEXEC_FOLDER;
     rtl::Bootstrap::expandMacros(aOriginal);
 
-    return rtl::OUStringToOString(aOriginal, RTL_TEXTENCODING_UTF8);
+    return aOriginal;
 }
 
 }
@@ -55,13 +56,14 @@ IMPL_LINK_TYPED(CrashReportDialog, BtnHdl, Button*, pBtn, void)
     if (pBtn == mpBtnSend.get())
     {
         std::string ini_path = CrashReporter::getIniFileName();
-#if defined WNT
-        OString aCommand = getLibDir().copy(8) + "/minidump_upload.exe " + ini_path.c_str();
-#else
-        OString aCommand = getLibDir().copy(7) + "/minidump_upload " + ini_path.c_str();
-#endif
-        int retVal = std::system(aCommand.getStr());
-        SAL_WARN_IF(retVal != 0, "crashreport", "Failed to upload minidump. Error Code: " << retVal);
+        OUString aCommand;
+        osl::FileBase::getSystemPathFromFileURL(getLibDir() + "/minidump_upload" + SAL_EXEEXTENSION, aCommand);
+
+        aCommand = aCommand;
+        OString aOStringCommand = rtl::OUStringToOString(aCommand, RTL_TEXTENCODING_UTF8) + " " + ini_path.c_str();
+        int retVal = std::system(aOStringCommand.getStr());
+        SAL_WARN_IF(retVal != 0, "svx.dialog", "Failed to upload minidump. Error Code: " << retVal);
+        // TODO: moggi: return the id for the user to look it up
         Close();
     }
     else if (pBtn == mpBtnCancel.get())
commit 116fe7be1661b96bbf93e3052c07f7657beee942
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Wed May 25 00:09:21 2016 +0200

    crash report lib should be part of mergelib
    
    Change-Id: I23c338f9fcf7eeea4a440013ea6c1b9206e040f3
    Reviewed-on: https://gerrit.libreoffice.org/25430
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/solenv/gbuild/extensions/pre_MergedLibsList.mk b/solenv/gbuild/extensions/pre_MergedLibsList.mk
index 1ca047f..9d43038 100644
--- a/solenv/gbuild/extensions/pre_MergedLibsList.mk
+++ b/solenv/gbuild/extensions/pre_MergedLibsList.mk
@@ -18,6 +18,7 @@ gb_MERGEDLIBS := \
 	canvastools \
 	configmgr \
 	cppcanvas \
+	$(call gb_Helper_optional,BREAKPAD,crashreport) \
 	$(call gb_Helper_optional,DBCONNECTIVITY,dbtools) \
 	deployment \
 	deploymentmisc \
commit a40f4821017d402103a66ad500da7dac10d33851
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue May 24 21:31:32 2016 +0200

    don't use the VM URL anywhere
    
    Change-Id: I0967c8fcea972b2dde58e3481f4767e225d3b2ba

diff --git a/bin/upload_symbols.py b/bin/upload_symbols.py
index fd4246e..d382f70 100755
--- a/bin/upload_symbols.py
+++ b/bin/upload_symbols.py
@@ -18,8 +18,8 @@ def main():
         print("Invalid number of parameters")
         sys.exit(1)
 
-    upload_url = "http://vm171.documentfoundation.org/upload/"
-    login_url = "http://vm171.documentfoundation.org/accounts/login/"
+    upload_url = "http://crashreport.libreoffice.org/upload/"
+    login_url = "http://crashreport.libreoffice.org/accounts/login/"
 
     config = configparser.ConfigParser()
     config.read(sys.argv[2])
commit bab22f4205a65ef2e7975312e72d591b36fc25bd
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue May 24 21:05:02 2016 +0200

    use correct path for minidump_upload on windows
    
    Change-Id: I1cd60d8b8b1c55b039f76bdaa4f73dc31e654d12

diff --git a/svx/source/dialog/crashreportdlg.cxx b/svx/source/dialog/crashreportdlg.cxx
index 74066a8..730dff5 100644
--- a/svx/source/dialog/crashreportdlg.cxx
+++ b/svx/source/dialog/crashreportdlg.cxx
@@ -55,7 +55,11 @@ IMPL_LINK_TYPED(CrashReportDialog, BtnHdl, Button*, pBtn, void)
     if (pBtn == mpBtnSend.get())
     {
         std::string ini_path = CrashReporter::getIniFileName();
+#if defined WNT
+        OString aCommand = getLibDir().copy(8) + "/minidump_upload.exe " + ini_path.c_str();
+#else
         OString aCommand = getLibDir().copy(7) + "/minidump_upload " + ini_path.c_str();
+#endif
         int retVal = std::system(aCommand.getStr());
         SAL_WARN_IF(retVal != 0, "crashreport", "Failed to upload minidump. Error Code: " << retVal);
         Close();
commit b99b23cfdb888d52b5ef447e875e8ed354040b9b
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue May 24 21:03:35 2016 +0200

    add the file extension for minidumps on windows
    
    Change-Id: Ib5692ef839c500cac7d2551d0b0ee6faf141132a

diff --git a/desktop/source/app/sofficemain.cxx b/desktop/source/app/sofficemain.cxx
index 8820d7f..d1c5885 100644
--- a/desktop/source/app/sofficemain.cxx
+++ b/desktop/source/app/sofficemain.cxx
@@ -89,7 +89,7 @@ static bool dumpCallback(const wchar_t* path, const wchar_t* id,
     std::ofstream minidump_file(ini_path, std::ios_base::app);
     // TODO: moggi: can we avoid this conversion
     std::wstring_convert<std::codecvt_utf8<wchar_t>> conv1;
-    std::string aPath = conv1.to_bytes(std::wstring(path)) + conv1.to_bytes(std::wstring(id));
+    std::string aPath = conv1.to_bytes(std::wstring(path)) + conv1.to_bytes(std::wstring(id)) + ".dmp";
     minidump_file << "DumpFile=" << aPath << "\n";;
     minidump_file.close();
     SAL_WARN("desktop", "minidump generated: " << aPath);
commit 30ec9e648cde0c5c8f115d6a939bbd110ec3a107
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue May 24 21:02:58 2016 +0200

    use correct URL for crashreport
    
    Change-Id: Ia7d584685961e8573c1c35f2560a66664632f5f7

diff --git a/desktop/source/app/crashreport.cxx b/desktop/source/app/crashreport.cxx
index 7a8446c..b8e0127 100644
--- a/desktop/source/app/crashreport.cxx
+++ b/desktop/source/app/crashreport.cxx
@@ -46,7 +46,7 @@ void CrashReporter::writeCommonInfo()
     std::ofstream minidump_file(ini_path, std::ios_base::trunc);
     minidump_file << "ProductName=LibreOffice\n";
     minidump_file << "Version=" LIBO_VERSION_DOTTED "\n";
-    minidump_file << "URL=http://crashreport.libreoffice.org/submit\n";
+    minidump_file << "URL=http://crashreport.libreoffice.org/submit/\n";
     minidump_file.close();
 
     updateMinidumpLocation();
commit 9c6c2ceb1e1ca462ea1ea3a47862ae5e56b75464
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue May 24 20:51:32 2016 +0200

    copy and paste error in minidump uploader
    
    Change-Id: I114325f2de2f2953d158b88f5f0e0a3bac853368

diff --git a/desktop/source/minidump/minidump_upload.cxx b/desktop/source/minidump/minidump_upload.cxx
index 658918a..24039e5 100644
--- a/desktop/source/minidump/minidump_upload.cxx

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list