*/}}
YimingWu 1 день назад
Родитель
Сommit
e3f45be1ff
2 измененных файлов с 12 добавлено и 8 удалено
  1. 10 6
      resources/la_operators.c
  2. 2 2
      resources/la_properties.c

+ 10 - 6
resources/la_operators.c

@@ -2698,14 +2698,14 @@ static int la_InitProofLUT(void** lut, cmsHPROFILE cmyk_profile, cmsHPROFILE rgb
     cmsDoTransform(htransform,data,table,LA_LUT_PIXCOUNT);
 }
 int laLoadProofingICC(char* path){
-    cmsHPROFILE cmyk = cmsOpenProfileFromFile(path,"r");
+    cmsHPROFILE cmyk = cmsOpenProfileFromFile(path, "r"); if (!cmyk) return 0;
     cmsHPROFILE srgb = cmsCreate_sRGBProfile();
     cmsHPROFILE clay = la_CreateProfileClay();
     cmsHPROFILE d65p3 = la_CreateProfileD65P3();
-    char* lut1,*lut2,*lut3;
-    la_InitProofLUT(&lut1,cmyk,srgb); if(!lut1){ return 0; }
-    la_InitProofLUT(&lut2,cmyk,srgb); if(!lut2){ free(lut1); return 0; }
-    la_InitProofLUT(&lut3,cmyk,srgb); if(!lut3){ free(lut1);free(lut2); return 0; }
+    char* lut1,*lut2,*lut3; int res=0;
+    la_InitProofLUT(&lut1,cmyk,srgb); if(!lut1){ goto cleanup; }
+    la_InitProofLUT(&lut2,cmyk,srgb); if(!lut2){ goto cleanup; }
+    la_InitProofLUT(&lut3,cmyk,srgb); if(!lut3){ goto cleanup; }
 
     laProofingLUT *pl=memAcquire(sizeof(laProofingLUT));
     char* name=strGetLastSegment(path,LA_PATH_SEP);
@@ -2714,7 +2714,11 @@ int laLoadProofingICC(char* path){
 
     lstAppendItem(&MAIN.ProofingLUTs,pl);
     laSetProofingLut(pl);
-    return 1;
+    res=1;
+cleanup:
+    if(lut1) free(lut1); if(lut2) free(lut2); if(lut3) free(lut3);
+    cmsCloseProfile(srgb); cmsCloseProfile(clay); cmsCloseProfile(d65p3);
+    return res;
 }
 static void la_RemoveProofingProfile(laProofingLUT* pl){
     laProofingLUT* npl=pl->Item.pNext?pl->Item.pNext:pl->Item.pPrev;

+ 2 - 2
resources/la_properties.c

@@ -1153,13 +1153,13 @@ void* lagetraw_ProofingData(laProofingLUT* pl, int* r_size, int* ret_is_copy){
     int single_size=LA_LUT_PIXCOUNT*3;
     *r_size=3*sizeof(char)*single_size; // 3x rgb x pixcount
     *ret_is_copy=1;
-    void* data=malloc(*r_size);
+    char* data=malloc(*r_size);
     memcpy(data,pl->TablesRGB,single_size);
     memcpy(&data[single_size],pl->TableClay,single_size);
     memcpy(&data[single_size*2],pl->TableD65P3,single_size);
     return data;
 }
-void lasetraw_ProofingData(laProofingLUT* pl, void* data, int DataSize){
+void lasetraw_ProofingData(laProofingLUT* pl, char* data, int DataSize){
     int single_size=LA_LUT_PIXCOUNT*3; if(DataSize<single_size*3) return;
     if(!pl->TablesRGB)pl->TablesRGB=malloc(single_size);   memcpy(pl->TablesRGB,data,single_size);
     if(!pl->TableClay)pl->TableClay=malloc(single_size);   memcpy(pl->TableClay,&data[single_size],single_size);