< prev index next >

src/java.desktop/unix/native/common/awt/fontpath.c

Print this page
rev 56159 : 8230480: check malloc/calloc results in java.desktop

@@ -339,10 +339,13 @@
      * Hopefully we are left only with Type1 and TrueType directories.
      * It doesn't matter much if there are extraneous directories, it'll just
      * cost us a little wasted effort upstream.
      */
     fontdirs = (char**)calloc(nPaths+1, sizeof(char*));
+    if (fontdirs == NULL) {
+        return NULL;
+    }
     pos = 0;
     for (i=0; i < nPaths; i++) {
         if (x11Path[i][0] != '/') {
             continue;
         }

@@ -418,10 +421,13 @@
         ptr = p3;
         while (*ptr++ != NULL) len3++;
     }
     totalLen = len1+len2+len3;
     fontdirs = (char**)calloc(totalLen, sizeof(char*));
+    if (fontdirs == NULL) {
+        return NULL;
+    }
 
     for (i=0; i < len1; i++) {
         if (noType1 && strstr(p1[i], "Type1") != NULL) {
             continue;
         }

@@ -814,10 +820,14 @@
     if (fontSet == NULL) {
         /* FcFontList() may return NULL if fonts are not installed. */
         fontdirs = NULL;
     } else {
         fontdirs = (char**)calloc(fontSet->nfont+1, sizeof(char*));
+        if (fontdirs == NULL) {
+            (*FcFontSetDestroy)(fontSet);
+            goto cleanup;
+        }
         for (f=0; f < fontSet->nfont; f++) {
             FcChar8 *file;
             FcChar8 *dir;
             if ((*FcPatternGetString)(fontSet->fonts[f], FC_FILE, 0, &file) ==
                                       FcResultMatch) {

@@ -838,10 +848,11 @@
         }
         /* Free fontset if one was returned */
         (*FcFontSetDestroy)(fontSet);
     }
 
+cleanup:
     /* Free memory and close the ".so" */
     (*FcPatternDestroy)(pattern);
     closeFontConfig(libfontconfig, JNI_TRUE);
     return fontdirs;
 }
< prev index next >