8149714: [parfait] char array lengths don't match in awt_Font.cpp:1701
authorprr
Thu, 28 Jul 2016 06:02:40 -0700
changeset 40154 de35b2251350
parent 40153 33332d3217a9
child 40155 b909b3a9277c
child 40157 8d2d7b4b0a59
8149714: [parfait] char array lengths don't match in awt_Font.cpp:1701 Reviewed-by: serb, ssadetsky
jdk/src/java.desktop/windows/native/libawt/windows/awt_Font.cpp
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Font.cpp	Wed Jul 27 15:32:25 2016 +0300
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Font.cpp	Thu Jul 28 06:02:40 2016 -0700
@@ -1679,6 +1679,8 @@
 
 CSegTableManager g_segTableManager;
 
+#define KEYLEN 16
+
 class CCombinedSegTable : public CSegTableComponent
 {
 public:
@@ -1689,7 +1691,7 @@
 private:
     LPSTR GetCodePageSubkey();
     void GetEUDCFileName(LPWSTR lpszFileName, int cchFileName);
-    static char m_szCodePageSubkey[16];
+    static char m_szCodePageSubkey[KEYLEN];
     static WCHAR m_szDefaultEUDCFile[_MAX_PATH];
     static BOOL m_fEUDCSubKeyExist;
     static BOOL m_fTTEUDCFileExist;
@@ -1697,7 +1699,7 @@
     CEUDCSegTable* m_pEUDCSegTable;
 };
 
-char CCombinedSegTable::m_szCodePageSubkey[16] = "";
+char CCombinedSegTable::m_szCodePageSubkey[KEYLEN] = "";
 
 WCHAR CCombinedSegTable::m_szDefaultEUDCFile[_MAX_PATH] = L"";
 
@@ -1729,8 +1731,11 @@
     }
     lpszCP++; // cf lpszCP = "932"
 
-    char szSubKey[80];
+    char szSubKey[KEYLEN];
     strcpy(szSubKey, "EUDC\\");
+    if ((strlen(szSubKey) + strlen(lpszCP)) >= KEYLEN) {
+        return NULL;
+    }
     strcpy(&(szSubKey[strlen(szSubKey)]), lpszCP);
     strcpy(m_szCodePageSubkey, szSubKey);
     return m_szCodePageSubkey;