@@ -516,14 +516,14 @@ jpeg_read_icc_profile(j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned *i
516516
517517 *icc_data_ptr = nullptr ; // avoid confusion if FALSE return
518518 *icc_data_len = 0 ;
519-
519+
520520 /* *
521521 this first pass over the saved markers discovers whether there are
522522 any ICC markers and verifies the consistency of the marker numbering.
523523 */
524-
524+
525525 memset (marker_present, 0 , (MAX_SEQ_NO + 1 ));
526-
526+
527527 for (marker = cinfo->marker_list ; marker; marker = marker->next ) {
528528 if (marker_is_icc (marker)) {
529529 if (num_markers == 0 ) {
@@ -545,15 +545,15 @@ jpeg_read_icc_profile(j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned *i
545545 data_length[seq_no] = marker->data_length - ICC_HEADER_SIZE;
546546 }
547547 }
548-
548+
549549 if (num_markers == 0 )
550550 return FALSE ;
551551
552552 /* *
553553 check for missing markers, count total space needed,
554554 compute offset of each marker's part of the data.
555555 */
556-
556+
557557 total_length = 0 ;
558558 for (seq_no = 1 ; seq_no <= num_markers; seq_no++) {
559559 if (marker_present[seq_no] == 0 ) {
@@ -562,38 +562,36 @@ jpeg_read_icc_profile(j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned *i
562562 data_offset[seq_no] = total_length;
563563 total_length += data_length[seq_no];
564564 }
565-
565+
566566 if (total_length <= 0 ) {
567567 return FALSE ; // found only empty markers ?
568568 }
569-
569+
570570 // allocate space for assembled data
571- std::unique_ptr<void , decltype (&free)> safeIcc (malloc (total_length * sizeof (JOCTET), &free);
572- auto *icc_data = static_cast <JOCTET*>(safeIcc.get ());
571+ std::unique_ptr<JOCTET, decltype (&free)> icc_data (static_cast <JOCTET*>(malloc (total_length * sizeof (JOCTET))), &free);
573572 if (!icc_data) {
574573 return FALSE ; // out of memory
575574 }
576-
575+
577576 // and fill it in
578577 for (marker = cinfo->marker_list ; marker; marker = marker->next ) {
579578 if (marker_is_icc (marker)) {
580579 JOCTET FAR *src_ptr;
581580 JOCTET *dst_ptr;
582581 unsigned length;
583582 seq_no = GETJOCTET (marker->data [12 ]);
584- dst_ptr = icc_data + data_offset[seq_no];
583+ dst_ptr = icc_data. get () + data_offset[seq_no];
585584 src_ptr = marker->data + ICC_HEADER_SIZE;
586585 length = data_length[seq_no];
587586 while (length--) {
588587 *dst_ptr++ = *src_ptr++;
589588 }
590589 }
591590 }
592-
593- *icc_data_ptr = icc_data;
591+
592+ *icc_data_ptr = icc_data. release () ;
594593 *icc_data_len = total_length;
595- safeIcc.release ();
596-
594+
597595 return TRUE ;
598596}
599597#endif
0 commit comments