From df659ac173b247b4ad440fb2979ff51ff45e0aa4 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Tue, 10 May 2011 16:14:51 -0700 Subject: Make sure the ogg extractor returns appropriate error codes. Change-Id: I36cbf58aa6fa9195e1cc052f91e1183f57069d03 --- media/libstagefright/OggExtractor.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'media/libstagefright/OggExtractor.cpp') diff --git a/media/libstagefright/OggExtractor.cpp b/media/libstagefright/OggExtractor.cpp index 6538a05..1560b8e 100644 --- a/media/libstagefright/OggExtractor.cpp +++ b/media/libstagefright/OggExtractor.cpp @@ -378,12 +378,19 @@ status_t MyVorbisExtractor::seekToOffset(off64_t offset) { ssize_t MyVorbisExtractor::readPage(off64_t offset, Page *page) { uint8_t header[27]; - if (mSource->readAt(offset, header, sizeof(header)) + ssize_t n; + if ((n = mSource->readAt(offset, header, sizeof(header))) < (ssize_t)sizeof(header)) { - LOGV("failed to read %d bytes at offset 0x%016llx", - sizeof(header), offset); + LOGV("failed to read %d bytes at offset 0x%016llx, got %ld bytes", + sizeof(header), offset, n); - return ERROR_IO; + if (n < 0) { + return n; + } else if (n == 0) { + return ERROR_END_OF_STREAM; + } else { + return ERROR_IO; + } } if (memcmp(header, "OggS", 4)) { @@ -498,8 +505,8 @@ status_t MyVorbisExtractor::readNextPacket(MediaBuffer **out) { packetSize); if (n < (ssize_t)packetSize) { - LOGV("failed to read %d bytes at 0x%016llx", - packetSize, dataOffset); + LOGV("failed to read %d bytes at 0x%016llx, got %ld bytes", + packetSize, dataOffset, n); return ERROR_IO; } -- cgit v1.1