annotate dvdread_internal.h @ 76:677e09255a1c src

This patch fixes a segmentation fault hit when reading the DVD 'The Express'. It prevents a read/write beyond end of an array due to using a length value taken from the DVD, which can exceed the allocated size. https://bugs.launchpad.net/ubuntu/+source/libdvdread/+bug/894170 The patch was originally written by rickyrockrat (sorry, I don't have his email address) for 4.1.3. I got the DVD and reproduced the segfault using 4.2.0 and verified the patch stops the segfault from happening. We're not confident this is the best fix though, so are posting it here for review. Signed-off-by: Bryce Harrington <bryce@canonical.com>
author rathann
date Sun, 09 Dec 2012 22:03:38 +0000
parents 3bc841283972
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
1 /*
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
2 * This file is part of libdvdread.
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
3 *
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
4 * libdvdread is free software; you can redistribute it and/or modify
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
5 * it under the terms of the GNU General Public License as published by
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
7 * (at your option) any later version.
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
8 *
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
9 * libdvdread is distributed in the hope that it will be useful,
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
12 * GNU General Public License for more details.
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
13 *
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
14 * You should have received a copy of the GNU General Public License along
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
15 * with libdvdread; if not, write to the Free Software Foundation, Inc.,
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
17 */
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
18
23
ac07d427fbc6 Use consistent multiple inclusion guards everywhere:
diego
parents: 3
diff changeset
19 #ifndef LIBDVDREAD_DVDREAD_INTERNAL_H
ac07d427fbc6 Use consistent multiple inclusion guards everywhere:
diego
parents: 3
diff changeset
20 #define LIBDVDREAD_DVDREAD_INTERNAL_H
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
21
62
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
22 #include <stdint.h>
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
23 #include <sys/types.h>
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
24
41
ef679522d00f replaced conditional checks on MSC with _WIN32 to permit MINGW to mount and decrypt images; patch by John Stebbins (stebbing jetheaddev com)
nicodvb
parents: 27
diff changeset
25 #ifdef _WIN32
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
26 #include <unistd.h>
41
ef679522d00f replaced conditional checks on MSC with _WIN32 to permit MINGW to mount and decrypt images; patch by John Stebbins (stebbing jetheaddev com)
nicodvb
parents: 27
diff changeset
27 #endif /* _WIN32 */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
28
62
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
29 #include "dvdread/dvd_reader.h"
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
30
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
31 #define CHECK_VALUE(arg) \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
32 if(!(arg)) { \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
33 fprintf(stderr, "\n*** libdvdread: CHECK_VALUE failed in %s:%i ***" \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
34 "\n*** for %s ***\n\n", \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
35 __FILE__, __LINE__, # arg ); \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
36 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
37
62
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
38 int UDFReadBlocksRaw(dvd_reader_t *device, uint32_t lb_number,
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
39 size_t block_count, unsigned char *data, int encrypted);
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
40
23
ac07d427fbc6 Use consistent multiple inclusion guards everywhere:
diego
parents: 3
diff changeset
41 #endif /* LIBDVDREAD_DVDREAD_INTERNAL_H */