jdk/src/share/native/sun/awt/medialib/mlib_ImageCreate.c
changeset 18228 f14a008f78be
parent 16868 b5e2827ecc50
child 23010 6dadb192ad81
equal deleted inserted replaced
18227:7e588bf6aba5 18228:f14a008f78be
   158   }
   158   }
   159 
   159 
   160 /* Check if stride == width
   160 /* Check if stride == width
   161    * If it is then image can be treated as a 1-D vector
   161    * If it is then image can be treated as a 1-D vector
   162  */
   162  */
       
   163 
       
   164   if (!SAFE_TO_MULT(width, channels)) {
       
   165     return NULL;
       
   166   }
       
   167 
       
   168   wb = width * channels;
       
   169 
   163   switch (type) {
   170   switch (type) {
   164     case MLIB_DOUBLE:
   171     case MLIB_DOUBLE:
   165       wb = width * channels * 8;
   172       if (!SAFE_TO_MULT(wb, 8)) {
       
   173         return NULL;
       
   174       }
       
   175       wb *= 8;
   166       mask = 7;
   176       mask = 7;
   167       break;
   177       break;
   168     case MLIB_FLOAT:
   178     case MLIB_FLOAT:
   169     case MLIB_INT:
   179     case MLIB_INT:
   170       wb = width * channels * 4;
   180       if (!SAFE_TO_MULT(wb, 4)) {
       
   181         return NULL;
       
   182       }
       
   183       wb *= 4;
   171       mask = 3;
   184       mask = 3;
   172       break;
   185       break;
   173     case MLIB_USHORT:
   186     case MLIB_USHORT:
   174     case MLIB_SHORT:
   187     case MLIB_SHORT:
   175       wb = width * channels * 2;
   188       if (!SAFE_TO_MULT(wb, 2)) {
       
   189         return NULL;
       
   190       }
       
   191       wb *= 2;
   176       mask = 1;
   192       mask = 1;
   177       break;
   193       break;
   178     case MLIB_BYTE:
   194     case MLIB_BYTE:
   179       wb = width * channels;
   195       // wb is ready
   180       mask = 0;
   196       mask = 0;
   181       break;
   197       break;
   182     case MLIB_BIT:
   198     case MLIB_BIT:
   183       wb = (width * channels + 7) / 8;
   199       if (!SAFE_TO_ADD(7, wb)) {
       
   200         return NULL;
       
   201       }
       
   202       wb = (wb + 7) / 8;
   184       mask = 0;
   203       mask = 0;
   185       break;
   204       break;
   186     default:
   205     default:
   187       return NULL;
   206       return NULL;
   188   }
   207   }
   268       }
   287       }
   269       wb *= 4;
   288       wb *= 4;
   270       break;
   289       break;
   271     case MLIB_USHORT:
   290     case MLIB_USHORT:
   272     case MLIB_SHORT:
   291     case MLIB_SHORT:
   273       if (!SAFE_TO_MULT(wb, 4)) {
   292       if (!SAFE_TO_MULT(wb, 2)) {
   274         return NULL;
   293         return NULL;
   275       }
   294       }
   276       wb *= 2;
   295       wb *= 2;
   277       break;
   296       break;
   278     case MLIB_BYTE:
   297     case MLIB_BYTE: