summaryrefslogtreecommitdiff
path: root/lib/driver/gnu_linux.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/driver/gnu_linux.c')
-rw-r--r--lib/driver/gnu_linux.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/driver/gnu_linux.c b/lib/driver/gnu_linux.c
index d8b88533..6e4b050a 100644
--- a/lib/driver/gnu_linux.c
+++ b/lib/driver/gnu_linux.c
@@ -1,7 +1,7 @@
/*
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011
- Rocky Bernstein <rocky@gnu.org>
+ 2012 Rocky Bernstein <rocky@gnu.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -601,7 +601,9 @@ get_track_msf_linux(void *p_user_data, track_t i_track, msf_t *msf)
{
_img_private_t *p_env = p_user_data;
- if (NULL == msf) return false;
+ if (NULL == msf ||
+ (i_track > CDIO_CD_MAX_TRACKS && i_track != CDIO_CDROM_LEADOUT_TRACK))
+ return false;
if (!p_env->gen.toc_init) read_toc_linux (p_user_data) ;
@@ -1179,6 +1181,13 @@ read_toc_linux (void *p_user_data)
p_env->gen.i_first_track = p_env->tochdr.cdth_trk0;
p_env->gen.i_tracks = p_env->tochdr.cdth_trk1;
+ if (p_env->gen.i_tracks > CDIO_CD_MAX_TRACKS) {
+ cdio_log(CDIO_LOG_WARN, "Number of tracks exceeds maximum (%d vs. %d)\n",
+ p_env->gen.i_tracks, CDIO_CD_MAX_TRACKS);
+ p_env->gen.i_tracks = CDIO_CD_MAX_TRACKS;
+ }
+
+
/* read individual tracks */
for (i= p_env->gen.i_first_track; i<=p_env->gen.i_tracks; i++) {
struct cdrom_tocentry *p_toc =