diff --git a/core/src/fpdftext/fpdf_text_int.cpp b/core/src/fpdftext/fpdf_text_int.cpp
index 5b174f0..42bbffa 100644
--- a/core/src/fpdftext/fpdf_text_int.cpp
+++ b/core/src/fpdftext/fpdf_text_int.cpp
@@ -1499,7 +1499,7 @@
         CPDF_ContentMarkItem& item = pMarkData->GetItem(n);
         CFX_ByteString tagStr = (CFX_ByteString)item.GetName();
         pDict = (CPDF_Dictionary*)item.GetParam();
-        CPDF_String* temp = (CPDF_String*)pDict->GetElement(FX_BSTRC("ActualText"));
+        CPDF_String* temp = (CPDF_String*)(pDict ? pDict->GetElement(FX_BSTRC("ActualText")) : NULL);
         if (temp) {
             actText = temp->GetUnicodeText();
         }
@@ -1875,30 +1875,30 @@
             }
         }
     }
-    if (bIsBidiAndMirrosInverse) {
-        FX_INT32 i, j;
-        i = iCharListStartAppend;
-        j = m_TempCharList.GetSize() - 1;
-        PAGECHAR_INFO tempCharInfo;
-        FX_INT32 tempIndex = 0;
-        for (; i < j; i++, j--) {
-            tempCharInfo = m_TempCharList[i];
-            m_TempCharList[i] = m_TempCharList[j];
-            m_TempCharList[j] = tempCharInfo;
-            tempIndex = m_TempCharList[i].m_Index;
-            m_TempCharList[i].m_Index = m_TempCharList[j].m_Index;
-            m_TempCharList[j].m_Index = tempIndex;
-        }
-        FX_WCHAR * pTempBuffer = m_TempTextBuf.GetBuffer();
-        i = iBufStartAppend;
-        j = m_TempTextBuf.GetLength() - 1;
-        FX_WCHAR wTemp;
-        for (; i < j; i++, j--) {
-            wTemp = pTempBuffer[i];
-            pTempBuffer[i] = pTempBuffer[j];
-            pTempBuffer[j] = wTemp;
-        }
-    }
+    if (bIsBidiAndMirrosInverse) {
+        FX_INT32 i, j;
+        i = iCharListStartAppend;
+        j = m_TempCharList.GetSize() - 1;
+        PAGECHAR_INFO tempCharInfo;
+        FX_INT32 tempIndex = 0;
+        for (; i < j; i++, j--) {
+            tempCharInfo = m_TempCharList[i];
+            m_TempCharList[i] = m_TempCharList[j];
+            m_TempCharList[j] = tempCharInfo;
+            tempIndex = m_TempCharList[i].m_Index;
+            m_TempCharList[i].m_Index = m_TempCharList[j].m_Index;
+            m_TempCharList[j].m_Index = tempIndex;
+        }
+        FX_WCHAR * pTempBuffer = m_TempTextBuf.GetBuffer();
+        i = iBufStartAppend;
+        j = m_TempTextBuf.GetLength() - 1;
+        FX_WCHAR wTemp;
+        for (; i < j; i++, j--) {
+            wTemp = pTempBuffer[i];
+            pTempBuffer[i] = pTempBuffer[j];
+            pTempBuffer[j] = wTemp;
+        }
+    }
 }
 FX_INT32 CPDF_TextPage::GetTextObjectWritingMode(const CPDF_TextObject* pTextObj)
 {
