-rw-r--r-- | lib/driver/gnu_linux.c | 1 | ||||
-rw-r--r-- | lib/driver/image/bincue.c | 2 | ||||
-rw-r--r-- | lib/driver/image/cdrdao.c | 2 | ||||
-rw-r--r-- | lib/driver/image/nrg.c | 22 | ||||
-rw-r--r-- | lib/iso9660/iso9660.c | 3 | ||||
-rw-r--r-- | lib/iso9660/iso9660_fs.c | 12 | ||||
-rw-r--r-- | lib/iso9660/rock.c | 5 |
diff --git a/lib/driver/gnu_linux.c b/lib/driver/gnu_linux.c index e7967397..7d84ff52 100644 --- a/lib/driver/gnu_linux.c +++ b/lib/driver/gnu_linux.c @@ -1581,7 +1581,6 @@ close_tray_linux (const char *psz_device) cdio_info ("CDROM_DRIVE_STATUS failed: %s, trying anyway", strerror(errno)); try_anyway: - i_rc = DRIVER_OP_SUCCESS; if((i_rc = ioctl(fd, CDROMCLOSETRAY)) != 0) { cdio_warn ("ioctl CDROMCLOSETRAY failed: %s\n", strerror(errno)); i_rc = DRIVER_OP_ERROR; diff --git a/lib/driver/image/bincue.c b/lib/driver/image/bincue.c index 8c2ae7a4..35031515 100644 --- a/lib/driver/image/bincue.c +++ b/lib/driver/image/bincue.c @@ -212,7 +212,7 @@ _read_bincue (void *p_user_data, void *data, size_t size) final_size += this_size; memcpy (p, buf, this_size); p += this_size; - this_size = cdio_stream_read(p_env->gen.data_source, buf, rem, 1); + cdio_stream_read(p_env->gen.data_source, buf, rem, 1); /* Skip over stuff at end of this sector and the beginning of the next. */ diff --git a/lib/driver/image/cdrdao.c b/lib/driver/image/cdrdao.c index 3d961c37..2109fac0 100644 --- a/lib/driver/image/cdrdao.c +++ b/lib/driver/image/cdrdao.c @@ -219,7 +219,7 @@ _read_cdrdao (void *user_data, void *data, size_t size) final_size += this_size; memcpy (p, buf, this_size); p += this_size; - this_size = cdio_stream_read(this_track->data_source, buf, rem, 1); + cdio_stream_read(this_track->data_source, buf, rem, 1); /* Skip over stuff at end of this sector and the beginning of the next. */ diff --git a/lib/driver/image/nrg.c b/lib/driver/image/nrg.c index 8508499d..e79f6e30 100644 --- a/lib/driver/image/nrg.c +++ b/lib/driver/image/nrg.c @@ -247,16 +247,15 @@ parse_nrg (_img_private_t *p_env, const char *psz_nrg_name, entries /= sizeof (_cuex_array_t); if (CUES_ID == opcode) { - lsn_t lsn = UINT32_FROM_BE (_entries[0].lsn); unsigned int idx; unsigned int i = 0; - - cdio_debug ("CUES type image detected" ); - + lsn_t lsn; /* = UINT32_FROM_BE (_entries[0].lsn); */ /* CUES LSN has 150 pregap include at beginning? -/ cdio_assert (lsn == 0?); */ + cdio_debug ("CUES type image detected" ); + p_env->is_cues = true; /* HACK alert. */ p_env->gen.i_tracks = 0; p_env->gen.i_first_track = 1; @@ -1271,12 +1270,15 @@ cdio_is_nrg(const char *psz_nrg) _img_private_t *p_env = calloc(1, sizeof (_img_private_t)); bool is_nrg = false; - if (psz_nrg == NULL) return false; + if (psz_nrg == NULL) { + is_nrg = false; + goto exit; + } if (!(p_env->gen.data_source = cdio_stdio_new (psz_nrg))) { cdio_warn ("can't open nrg image file %s for reading", psz_nrg); - free(p_env); - return false; + is_nrg = false; + goto exit; } if (parse_nrg(p_env, psz_nrg, CDIO_LOG_INFO)) { @@ -1285,11 +1287,15 @@ cdio_is_nrg(const char *psz_nrg) size_t psz_len; psz_len = strlen(psz_nrg); /* At least 4 characters needed for .nrg extension */ - if ( psz_len < 4 ) return false; + if ( psz_len < 4 ) { + is_nrg = false; + goto exit; + } is_nrg = strncasecmp( psz_nrg+(psz_len-3), "nrg", 3 ) == 0; #endif } + exit: _free_nrg(p_env); return is_nrg; } diff --git a/lib/iso9660/iso9660.c b/lib/iso9660/iso9660.c index 3f24f14f..7c55358a 100644 --- a/lib/iso9660/iso9660.c +++ b/lib/iso9660/iso9660.c @@ -786,7 +786,8 @@ iso9660_dir_add_entry_su(void *dir, ? strlen(filename) : 1); /* working hack! */ memcpy(&idr->filename.str[1], filename, from_711(idr->filename.len)); - memcpy(&dir8[offset] + su_offset, su_data, su_size); + if (su_size > 0 && su_data) + memcpy(&dir8[offset] + su_offset, su_data, su_size); } void diff --git a/lib/iso9660/iso9660_fs.c b/lib/iso9660/iso9660_fs.c index 0339b860..85ad2736 100644 --- a/lib/iso9660/iso9660_fs.c +++ b/lib/iso9660/iso9660_fs.c @@ -1141,7 +1141,10 @@ _fs_iso_stat_traverse (iso9660_t *p_iso, const iso9660_stat_t *_root, } ret = iso9660_iso_seek_read (p_iso, _dirbuf, _root->lsn, _root->secsize); - if (ret!=ISO_BLOCKSIZE*_root->secsize) return NULL; + if (ret!=ISO_BLOCKSIZE*_root->secsize) { + free(_dirbuf); + return NULL; + } while (offset < (_root->secsize * ISO_BLOCKSIZE)) { @@ -1384,12 +1387,14 @@ iso9660_fs_readdir (CdIo_t *p_cdio, const char psz_path[]) if (!_dirbuf) { cdio_warn("Couldn't calloc(1, %d)", p_stat->secsize * ISO_BLOCKSIZE); + iso9660_stat_free(p_stat); iso9660_dirlist_free(retval); return NULL; } if (cdio_read_data_sectors (p_cdio, _dirbuf, p_stat->lsn, ISO_BLOCKSIZE, p_stat->secsize)) { + iso9660_stat_free(p_stat); iso9660_dirlist_free(retval); return NULL; } @@ -1748,7 +1753,10 @@ iso_have_rr_traverse (iso9660_t *p_iso, const iso9660_stat_t *_root, } ret = iso9660_iso_seek_read (p_iso, _dirbuf, _root->lsn, _root->secsize); - if (ret!=ISO_BLOCKSIZE*_root->secsize) return false; + if (ret!=ISO_BLOCKSIZE*_root->secsize) { + free(_dirbuf); + return false; + } while (offset < (_root->secsize * ISO_BLOCKSIZE)) { diff --git a/lib/iso9660/rock.c b/lib/iso9660/rock.c index ab7be8b3..db15a2e0 100644 --- a/lib/iso9660/rock.c +++ b/lib/iso9660/rock.c @@ -422,8 +422,9 @@ parse_rock_ridge_stat_internal(iso9660_dir_t *p_iso9660_dir, switch(p_sl->flags &~1){ case 0: realloc_symlink(p_stat, p_sl->len); - memcpy(&(p_stat->rr.psz_symlink[p_stat->rr.i_symlink]), - p_sl->text, p_sl->len); + if (p_sl->text && p_sl->len) + memcpy(&(p_stat->rr.psz_symlink[p_stat->rr.i_symlink]), + p_sl->text, p_sl->len); p_stat->rr.i_symlink += p_sl->len; break; case 4: |