Fix off-by-one in sizing of m_EmbeddedToUnicodes.
authorTom Sepez <tsepez@chromium.org>
Mon, 13 Oct 2014 20:16:32 +0000 (13:16 -0700)
committerTom Sepez <tsepez@chromium.org>
Mon, 13 Oct 2014 20:16:32 +0000 (13:16 -0700)
BUG=421196
R=bo_xu@foxitsoftware.com

Review URL: https://codereview.chromium.org/656463006

core/include/fpdfapi/fpdf_resource.h
core/src/fpdfapi/fpdf_font/font_int.h
core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp

index 937024c..7bad015 100644 (file)
@@ -480,6 +480,8 @@ protected:
 #define CIDSET_JAPAN1          3
 #define CIDSET_KOREA1          4
 #define CIDSET_UNICODE         5
+#define NUMBER_OF_CIDSETS   6
+
 class CPDF_CIDFont : public CPDF_Font
 {
 public:
index b151d78..3ce9664 100644 (file)
@@ -39,11 +39,11 @@ public:
     struct {
         const struct FXCMAP_CMap*      m_pMapList;
         int                            m_Count;
-    } m_EmbeddedCharsets[5];
+    } m_EmbeddedCharsets[NUMBER_OF_CIDSETS];
     struct {
         const FX_WORD* m_pMap;
         int                            m_Count;
-    } m_EmbeddedToUnicodes[5];
+    } m_EmbeddedToUnicodes[NUMBER_OF_CIDSETS];
     FX_LPBYTE                  m_pContrastRamps;
 };
 struct _CMap_CodeRange {
index 2cee90c..e5dabc3 100644 (file)
@@ -76,18 +76,15 @@ CPDF_CMap* CPDF_CMapManager::LoadPredefinedCMap(const CFX_ByteString& name, FX_B
     pCMap->LoadPredefined(this, pname, bPromptCJK);
     return pCMap;
 }
-const FX_LPCSTR g_CharsetNames[] = {NULL, "GB1", "CNS1", "Japan1", "Korea1", "UCS", NULL};
-const int g_CharsetCPs[] = {0, 936, 950, 932, 949, 1200, 0};
+static const FX_LPCSTR g_CharsetNames[NUMBER_OF_CIDSETS] = {NULL, "GB1", "CNS1", "Japan1", "Korea1", "UCS" };
+static const int g_CharsetCPs[NUMBER_OF_CIDSETS] = {0, 936, 950, 932, 949, 1200 };
 int _CharsetFromOrdering(const CFX_ByteString& Ordering)
 {
-    int charset = 1;
-    while (g_CharsetNames[charset] && Ordering != CFX_ByteStringC(g_CharsetNames[charset])) {
-        charset ++;
-    }
-    if (g_CharsetNames[charset] == NULL) {
-        return CIDSET_UNKNOWN;
-    }
-    return charset;
+       for (int charset = 1; charset < NUMBER_OF_CIDSETS; charset++) {
+               if (Ordering == CFX_ByteStringC(g_CharsetNames[charset]))
+                       return charset;
+       }
+       return CIDSET_UNKNOWN;
 }
 void CPDF_CMapManager::ReloadAll()
 {