[gnumeric] odf: all checks for all xml tags being closed. See #518.



commit 81b08a13bdeed4b3db3747f0dffc0b637f2db183
Author: Morten Welinder <terra gnome org>
Date:   Sat Aug 29 21:36:06 2020 -0400

    odf: all checks for all xml tags being closed.  See #518.

 plugins/openoffice/ChangeLog          |  5 +++++
 plugins/openoffice/openoffice-write.c | 17 ++++++++++++++---
 2 files changed, 19 insertions(+), 3 deletions(-)
---
diff --git a/plugins/openoffice/ChangeLog b/plugins/openoffice/ChangeLog
index da85cf49e..c9532a3c5 100644
--- a/plugins/openoffice/ChangeLog
+++ b/plugins/openoffice/ChangeLog
@@ -1,3 +1,8 @@
+2020-08-29  Morten Welinder  <terra gnome org>
+
+       * openoffice-write.c (odf_xml_end_element_check): New function to
+       ensure we have closed all tags.
+
 2020-08-12  Morten Welinder <terra gnome org>
 
        * Release 1.12.48
diff --git a/plugins/openoffice/openoffice-write.c b/plugins/openoffice/openoffice-write.c
index a9d55b2a8..df92601eb 100644
--- a/plugins/openoffice/openoffice-write.c
+++ b/plugins/openoffice/openoffice-write.c
@@ -219,6 +219,17 @@ static void odf_write_gog_style_graphic (GnmOOExport *state, GOStyle const *styl
 static void odf_write_gog_style_text (GnmOOExport *state, GOStyle const *style);
 
 
+static void
+odf_xml_end_element_check (GsfXMLOut *xout, char const *id)
+{
+       while (TRUE) {
+               const char *cid = gsf_xml_out_end_element (xout);
+               if (g_str_equal (cid, id))
+                       return;
+               g_critical ("Unbalanced xml tags while writing, please report");
+       }
+}
+
 /*****************************************************************************/
 
 #define PROGRESS_STEPS 500
@@ -5119,7 +5130,7 @@ odf_write_content (GnmOOExport *state, GsfOutput *child)
        gsf_xml_out_end_element (state->xml); /* </office:spreadsheet> */
        gsf_xml_out_end_element (state->xml); /* </office:body> */
 
-       gsf_xml_out_end_element (state->xml); /* </office:document-content> */
+       odf_xml_end_element_check (state->xml, OFFICE "document-content");
        g_object_unref (state->xml);
        state->xml = NULL;
 }
@@ -5812,7 +5823,7 @@ odf_write_styles (GnmOOExport *state, GsfOutput *child)
        odf_write_automatic_styles (state);
        odf_write_master_styles (state);
 
-       gsf_xml_out_end_element (state->xml); /* </office:document-styles> */
+       odf_xml_end_element_check (state->xml, OFFICE "document-styles");
 
        g_object_unref (state->xml);
        state->xml = NULL;
@@ -6346,7 +6357,7 @@ odf_write_settings (GnmOOExport *state, GsfOutput *child)
        odf_write_ooo_settings (state);
 
        gsf_xml_out_end_element (state->xml); /* </office:settings> */
-       gsf_xml_out_end_element (state->xml); /* </office:document-settings> */
+       odf_xml_end_element_check (state->xml, OFFICE "document-settings");
        g_object_unref (state->xml);
        state->xml = NULL;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]