From 6e5d3dc2d12ed3193c3d3e9c16c4a6d64f33e77c Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Thu, 31 Mar 2016 12:45:40 +0000 Subject: [PATCH] Bug fix: burn_make_input_sheet_v07t() used character code of block 0 for all blocks --- cdrskin/cdrskin_timestamp.h | 2 +- libburn/cdtext.c | 28 +++++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index cf7e9a0..2b6a224 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2016.03.30.200445" +#define Cdrskin_timestamP "2016.03.31.124348" diff --git a/libburn/cdtext.c b/libburn/cdtext.c index b44647b..5c95bd6 100755 --- a/libburn/cdtext.c +++ b/libburn/cdtext.c @@ -1,5 +1,5 @@ -/* Copyright (c) 2011 Thomas Schmitt +/* Copyright (c) 2011 - 2016 Thomas Schmitt Provided under GPL version 2 or later. */ @@ -1620,7 +1620,7 @@ static int burn_make_v07t(unsigned char *text_packs, int num_packs, return 0; } - /* Obtain first_tno and last_tno from type 0x88 if present. */ + /* Obtain first_tno and last_tno from type 0x8f if present. */ if (first_tno <= 0) { if (pack[5] > 0 && pack[5] + pack[6] < 100 && pack[5] <= pack[6]) { @@ -1647,6 +1647,21 @@ static int burn_make_v07t(unsigned char *text_packs, int num_packs, /* Report content */ result_size = 0; for (block = 0; block < 8; block++) { + /* Obtain character code, reject unknown ones */ + ret = search_pack(text_packs, num_packs, 0, 0x8f, block, + &pack, &pack_no, 0); + if (ret > 0) + *char_code = pack[4]; + if (*char_code != 0x00 && *char_code != 0x01 && + *char_code != 0x80) { + sprintf(msg, + "CD-TEXT block %d with unknown character code %2.2x", + block, (unsigned int) *char_code); + libdax_msgs_submit(libdax_messenger, -1, 0x0002019f, + LIBDAX_MSGS_SEV_FAILURE, + LIBDAX_MSGS_PRIO_HIGH, msg, 0, 0); + return 0; + } ret = report_block(text_packs, num_packs, block, first_tno, last_tno, *char_code, result, result_size, flag & 1); @@ -1656,16 +1671,7 @@ static int burn_make_v07t(unsigned char *text_packs, int num_packs, continue; result_size = ret; } - -#ifdef NIX - if (flag & 1) - return result_size; - return (int) strlen((char *) result); -#else /* NIX */ - return result_size; - -#endif /* ! NIX */ }