From 24035322420f39082af43cb370d0ba05bc12af0c Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 8 Oct 2006 10:04:09 +0000 Subject: [PATCH] Got rid of assert() in structure.c by soft means --- cdrskin/cdrskin_timestamp.h | 2 +- libburn/asserts.txt | 48 ++++++++++++++++---------- libburn/libdax_msgs.h | 1 + libburn/sector.c | 4 ++- libburn/spc.c | 5 ++- libburn/structure.c | 68 +++++++++++++++++++++++++++++++------ 6 files changed, 97 insertions(+), 31 deletions(-) diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index 506cc90..9dd1869 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2006.10.07.175427" +#define Cdrskin_timestamP "2006.10.08.095016" diff --git a/libburn/asserts.txt b/libburn/asserts.txt index 2a5d1af..dbc17cd 100644 --- a/libburn/asserts.txt +++ b/libburn/asserts.txt @@ -373,7 +373,7 @@ Called by sector_toc() sector_pregap() sector_postgap() sector_lout() ------------------------------------------------------------------------------ - 28) libburn/sector.c: assert(0); +++ 28) libburn/sector.c: assert(0); static char_to_isrc(): Called by subcode_user() with data set by API burn_track_set_isrc() Some character conversion fails on wrong input @@ -383,6 +383,8 @@ Some character conversion fails on wrong input => char_to_isrc() returns 0 as default => delete assert() +ts A61008 + ------------------------------------------------------------------------------ 29) libburn/sector.c: assert(qmode == 1 || qmode == 2 || qmode == 3); @@ -472,7 +474,7 @@ The transfer of the command via ioctl() failed ------------------------------------------------------------------------------ - 37) libburn/spc.c: assert(d->mdata->valid); +++ 37) libburn/spc.c: assert(d->mdata->valid); spc_select_error_params(): Drive was not properly programmed @@ -480,12 +482,13 @@ alias struct burn_drive.send_parameters() Called by burn_disc_read, - defunct - : Severe Application Error -(=> catch ! d->mdata->valid in burn_disc_read() ) -=> :) +=> moved up as mangled assert to burn_disc_read() + +ts A61007 ------------------------------------------------------------------------------ - 38) libburn/spc.c: assert(d->mdata->cdr_write || d->mdata->cdrw_write || +++ 38) libburn/spc.c: assert(d->mdata->cdr_write || d->mdata->cdrw_write || spc_sense_write_params(): Drive does not offer write of any known media type @@ -495,9 +498,11 @@ Called by API burn_drive_grab (assert test made there in soft) : Severe Command Level Problem => remove assert() +ts A61007 + ------------------------------------------------------------------------------ - 39) libburn/spc.c: assert(o->drive == d); +++ 39) libburn/spc.c: assert(o->drive == d); spc_select_write_params(): Drive does not match struct burn_write_opts @@ -509,9 +514,11 @@ Called by mmc_close_disc() (-defunct- ?), mmc_close_session() (-defunct- ?), : Severe Libburn Error => remove assert() +ts A61007 + ------------------------------------------------------------------------------ - 40) libburn/spc.c: assert(d->mdata->valid); +++ 40) libburn/spc.c: assert(d->mdata->valid); spc_select_write_params(): Drive was not properly programmed @@ -520,9 +527,9 @@ Called by (see 39) burn_disc_write_sync() indirectly by API burn_disc_write() : Severe Libburn Error -=> catch in burn_disc_write() -=> ? ignore command and issue LIBDAX_MSGS_SEV_SORRY ? -=> ? issue LIBDAX_MSGS_SEV_FATAL and shutdown libburn ? +=> caught in burn_disc_write() now + +ts A61007 ------------------------------------------------------------------------------ @@ -542,7 +549,7 @@ ts A61007 ------------------------------------------------------------------------------ - 42) libburn/structure.c: assert(!(pos > BURN_POS_END));\ +++ 42) libburn/structure.c: assert(!(pos > BURN_POS_END));\ macro RESIZE An illegal list index is given by the app. @@ -550,9 +557,9 @@ An illegal list index is given by the app. Used by API burn_session_add_track() and API burn_disc_add_session() : Severe Application Error -=> catch in API burn_session_add_track() , API burn_disc_add_session() -=> issue LIBDAX_MSGS_SEV_SORRY and return 0 -=> delete assert +=> replace assert by if-and-return-0 + +ts A61008 ------------------------------------------------------------------------------ @@ -561,21 +568,26 @@ API burn_session_remove_track() An application supplied pointer is NULL : Severe Application Error -=> issue LIBDAX_MSGS_SEV_SORRY and return 0 -=> delete assert +=> replace by if-and-return-0 + +ts A61008 ------------------------------------------------------------------------------ - 44) libburn/structure.c: assert((country[i] >= '0' || country[i] < '9') && +++ 44) libburn/structure.c: assert((country[i] >= '0' || country[i] < '9') && libburn/structure.c: assert((owner[i] >= '0' || owner[i] < '9') && libburn/structure.c: assert(year <= 99); libburn/structure.c: assert(serial <= 99999); API burn_track_set_isrc(): -Illegal texts supplied by application +Illegal texts supplied by application. +The logical expression is always true ! : Severe Application Error => issue LIBDAX_MSGS_SEV_SORRY and return => delete assert +=> delete assert 28) in char_to_isrc() + +ts A61008 ------------------------------------------------------------------------------ diff --git a/libburn/libdax_msgs.h b/libburn/libdax_msgs.h index 6349092..849468e 100644 --- a/libburn/libdax_msgs.h +++ b/libburn/libdax_msgs.h @@ -319,6 +319,7 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff 0x00020111 (FATAL,HIGH) = Could not allocate new auxiliary object 0x00020112 (SORRY,HIGH) = Bad combination of write_type and block_type 0x00020113 (FATAL,HIGH) = Drive capabilities not inquired yet + 0x00020114 (SORRY,HIGH) = Attempt to set ISRC with bad data ------------------------------------------------------------------------------ diff --git a/libburn/sector.c b/libburn/sector.c index 4db58ce..a1ec9f1 100644 --- a/libburn/sector.c +++ b/libburn/sector.c @@ -378,7 +378,9 @@ static char char_to_isrc(char c) return 0x11 + (c - 'A'); if (c >= 'a' && c <= 'z') return 0x11 + (c - 'a'); - assert(0); + + /* ts A61008 : obsoleted by test in burn_track_set_isrc() */ + /* a ssert(0); */ return 0; } diff --git a/libburn/spc.c b/libburn/spc.c index c44fc81..186eef7 100644 --- a/libburn/spc.c +++ b/libburn/spc.c @@ -9,7 +9,10 @@ #include #include #include -#include + +/* ts A61008 */ +/* #include */ + #include #include "transport.h" diff --git a/libburn/structure.c b/libburn/structure.c index 6719ab2..161ca53 100644 --- a/libburn/structure.c +++ b/libburn/structure.c @@ -1,4 +1,7 @@ -#include + +/* ts A61008 */ +/* #include */ + #include #include #include @@ -7,10 +10,18 @@ #include "write.h" #include "debug.h" +#include "libdax_msgs.h" +extern struct libdax_msgs *libdax_messenger; + + +/* ts A61008 : replaced Assert by if and return 0 */ +/* a ssert(!(pos > BURN_POS_END)); */ + #define RESIZE(TO, NEW, pos) {\ void *tmp;\ \ - assert(!(pos > BURN_POS_END));\ + if (pos > BURN_POS_END)\ + return 0;\ if (pos == BURN_POS_END)\ pos = TO->NEW##s;\ if (pos > TO->NEW##s)\ @@ -138,7 +149,10 @@ int burn_session_remove_track(struct burn_session *s, struct burn_track *t) struct burn_track **tmp; int i, pos = -1; - assert(s->track != NULL); + /* ts A61008 */ + /* a ssert(s->track != NULL); */ + if (s->track == NULL) + return 0; burn_track_free(t); @@ -203,23 +217,57 @@ void burn_track_set_isrc(struct burn_track *t, char *country, char *owner, { int i; - t->isrc.has_isrc = 1; for (i = 0; i < 2; ++i) { - assert((country[i] >= '0' || country[i] < '9') && + + /* ts A61008 : This is always true */ + /* a ssert((country[i] >= '0' || country[i] < '9') && (country[i] >= 'a' || country[i] < 'z') && - (country[i] >= 'A' || country[i] < 'Z')); + (country[i] >= 'A' || country[i] < 'Z')); */ + /* ts A61008 : now coordinated with sector.c: char_to_isrc() */ + if (! ((country[i] >= '0' && country[i] <= '9') || + (country[i] >= 'a' && country[i] <= 'z') || + (country[i] >= 'A' && country[i] <= 'Z') ) ) + goto is_not_allowed; + t->isrc.country[i] = country[i]; } for (i = 0; i < 3; ++i) { - assert((owner[i] >= '0' || owner[i] < '9') && + + /* ts A61008 : This is always true */ + /* a ssert((owner[i] >= '0' || owner[i] < '9') && (owner[i] >= 'a' || owner[i] < 'z') && - (owner[i] >= 'A' || owner[i] < 'Z')); + (owner[i] >= 'A' || owner[i] < 'Z')); */ + /* ts A61008 : now coordinated with sector.c: char_to_isrc() */ + if (! ((owner[i] >= '0' && owner[i] <= '9') || + (owner[i] >= 'a' && owner[i] <= 'z') || + (owner[i] >= 'A' && owner[i] <= 'Z') ) ) + goto is_not_allowed; + t->isrc.owner[i] = owner[i]; } - assert(year <= 99); + + /* ts A61008 */ + /* a ssert(year <= 99); */ + if (year > 99) + goto is_not_allowed; + t->isrc.year = year; - assert(serial <= 99999); + + /* ts A61008 */ + /* a ssert(serial <= 99999); */ + if (serial > 99999) + goto is_not_allowed; + t->isrc.serial = serial; + + /* ts A61008 */ + t->isrc.has_isrc = 1; + return; +is_not_allowed:; + libdax_msgs_submit(libdax_messenger, -1, 0x00020114, + LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, + "Attempt to set ISRC with bad data", 0, 0); + return; } void burn_track_clear_isrc(struct burn_track *t)