diff -Naur libwpd-0.10.3-orig/src/lib/libwpd_internal.cpp libwpd-0.10.3/src/lib/libwpd_internal.cpp
--- libwpd-0.10.3-orig/src/lib/libwpd_internal.cpp	2017-12-28 12:15:09.000000000 +0300
+++ libwpd-0.10.3/src/lib/libwpd_internal.cpp	2019-06-03 13:50:47.155048400 +0300
@@ -243,7 +243,7 @@
 
 	*chars = complexMap[i].unicodeChars;
 
-	for (unsigned j = 0; j<WPD_NUM_ELEMENTS(complexMap[i].unicodeChars); j++)
+	for (size_t j = 0; j<WPD_NUM_ELEMENTS(complexMap[i].unicodeChars); j++)
 	{
 		if (!(complexMap[i].unicodeChars[j]))
 			return (int)j;
diff -Naur libwpd-0.10.3-orig/src/lib/WP3ContentListener.cpp libwpd-0.10.3/src/lib/WP3ContentListener.cpp
--- libwpd-0.10.3-orig/src/lib/WP3ContentListener.cpp	2018-12-25 19:19:19.000000000 +0300
+++ libwpd-0.10.3/src/lib/WP3ContentListener.cpp	2019-06-03 13:48:56.694893800 +0300
@@ -509,7 +509,7 @@
 		tmpColumnDefinition.clear();
 		if (numColumns > 1)
 		{
-			unsigned i;
+			size_t i;
 			for (i=0; i<columnWidth.size(); i++)
 			{
 				if (isFixedWidth[i])
diff -Naur libwpd-0.10.3-orig/src/lib/WP6ContentListener.cpp libwpd-0.10.3/src/lib/WP6ContentListener.cpp
--- libwpd-0.10.3-orig/src/lib/WP6ContentListener.cpp	2018-12-25 20:05:01.000000000 +0300
+++ libwpd-0.10.3/src/lib/WP6ContentListener.cpp	2019-06-03 13:49:49.074967100 +0300
@@ -398,7 +398,7 @@
 	{
 		m_parseState->m_leaderCharacter = character;
 		m_parseState->m_leaderNumSpaces = numSpaces;
-		for (unsigned int i=0; i<m_ps->m_tabStops.size(); i++)
+		for (size_t i=0; i<m_ps->m_tabStops.size(); i++)
 		{
 			// change the leader information for those tab stops that use pre-WP9 leader method
 			if (m_parseState->m_tempUsePreWP9LeaderMethod[i])
@@ -939,7 +939,7 @@
 		tmpColumnDefinition.clear();
 		if (numColumns > 1)
 		{
-			unsigned i;
+			size_t i;
 			for (i=0; i<columnWidth.size(); i++)
 			{
 				if (isFixedWidth[i])
diff -Naur libwpd-0.10.3-orig/src/lib/WPXTable.cpp libwpd-0.10.3/src/lib/WPXTable.cpp
--- libwpd-0.10.3-orig/src/lib/WPXTable.cpp	2018-12-25 19:19:19.000000000 +0300
+++ libwpd-0.10.3/src/lib/WPXTable.cpp	2019-06-03 13:50:14.355002500 +0300
@@ -58,9 +58,9 @@
 void WPXTable::makeBordersConsistent()
 {
 	// make the top/bottom table borders consistent
-	for (unsigned i=0; i<m_tableRows.size(); i++)
+	for (size_t i=0; i<m_tableRows.size(); i++)
 	{
-		for (unsigned j=0; j<m_tableRows[i].size(); j++)
+		for (size_t j=0; j<m_tableRows[i].size(); j++)
 		{
 			if (i < (m_tableRows.size()-1))
 			{
diff -Naur libwpd-0.10.3-orig/src/lib/WPXTable.h libwpd-0.10.3/src/lib/WPXTable.h
--- libwpd-0.10.3-orig/src/lib/WPXTable.h	2018-12-25 19:19:19.000000000 +0300
+++ libwpd-0.10.3/src/lib/WPXTable.h	2019-06-03 13:48:21.954845100 +0300
@@ -53,7 +53,7 @@
 	~WPXTable();
 	void insertRow();
 	void insertCell(unsigned char colSpan, unsigned char rowSpan, unsigned char borderBits);
-	const WPXTableCell  *getCell(size_t i, size_t j)
+	const WPXTableCell  *getCell(std::size_t i, std::size_t j)
 	{
 		return &(m_tableRows[i])[j];
 	}
