From cb662033de7c9c14f713fe6553f8bd919704d14e Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 14 Jan 2015 16:08:19 +0100
Subject: [PATCH] OO-1389: escape & in docx header and copy the header with
 UTF-8 charset

---
 src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java  | 3 +++
 .../java/org/olat/core/util/openxml/OpenXMLDocumentWriter.java | 3 ++-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java b/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java
index 6106efb167d..98a2eeb95ee 100644
--- a/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java
+++ b/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java
@@ -102,6 +102,9 @@ public class OpenXMLDocument {
 	
 	public void setDocumentHeader(String header) {
 		documentHeader = header;
+		if(StringHelper.containsNonWhitespace(documentHeader)) {
+			documentHeader = documentHeader.replace("&", "&amp;");
+		}
 	}
 	
 	public VFSContainer getMediaContainer() {
diff --git a/src/main/java/org/olat/core/util/openxml/OpenXMLDocumentWriter.java b/src/main/java/org/olat/core/util/openxml/OpenXMLDocumentWriter.java
index 89d0697d657..2d05fbbc7b4 100644
--- a/src/main/java/org/olat/core/util/openxml/OpenXMLDocumentWriter.java
+++ b/src/main/java/org/olat/core/util/openxml/OpenXMLDocumentWriter.java
@@ -23,6 +23,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.charset.Charset;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
@@ -110,7 +111,7 @@ public class OpenXMLDocumentWriter {
 		for(HeaderReference headerRef:document.getHeaders()) {
 			ZipEntry headerDocument = new ZipEntry("word/" + headerRef.getFilename());
 			out.putNextEntry(headerDocument);
-			IOUtils.write(headerRef.getHeader(), out);
+			IOUtils.write(headerRef.getHeader(), out, Charset.forName("UTF-8"));
 			out.closeEntry();
 		}
 
-- 
GitLab