Bug 966044 - Fix unconditional single byte buffer overflow in EbmlComposer::generateHeader(). (r=rillian)

This commit is contained in:
Eric Faust 2014-01-30 16:42:00 -08:00
Родитель a5df241b98
Коммит cd2bbf3132
4 изменённых файлов: 43 добавлений и 9 удалений

Просмотреть файл

@ -38,17 +38,14 @@ void EbmlComposer::GenerateHeader()
EbmlLoc trackLoc;
Ebml_StartSubElement(&ebml, &trackLoc, Tracks);
{
char cid_string[8];
// Video
if (mWidth > 0 && mHeight > 0) {
strcpy(cid_string, "V_VP8");
writeVideoTrack(&ebml, 0x1, 0, cid_string,
writeVideoTrack(&ebml, 0x1, 0, "V_VP8",
mWidth, mHeight, mFrameRate);
}
// Audio
if (mCodecPrivateData.Length() > 0) {
strcpy(cid_string, "A_VORBIS");
writeAudioTrack(&ebml, 0x2, 0x0, cid_string, mSampleFreq,
writeAudioTrack(&ebml, 0x2, 0x0, "A_VORBIS", mSampleFreq,
mChannels, mCodecPrivateData.Elements(),
mCodecPrivateData.Length());
}

Просмотреть файл

@ -56,7 +56,7 @@ static UInt64 generateTrackID(unsigned int trackNumber) {
}
void writeVideoTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
const char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
double frameRate) {
EbmlLoc start;
UInt64 trackID;
@ -79,7 +79,7 @@ void writeVideoTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
Ebml_EndSubElement(glob, &start); // Track Entry
}
void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
char *codecId, double samplingFrequency, unsigned int channels,
const char *codecId, double samplingFrequency, unsigned int channels,
unsigned char *private, unsigned long privateSize) {
EbmlLoc start;
UInt64 trackID;

Просмотреть файл

@ -20,10 +20,10 @@ void writeHeader(EbmlGlobal *ebml);
void writeSegmentInformation(EbmlGlobal *ebml, EbmlLoc *startInfo, unsigned long timeCodeScale, double duration);
// this function is a helper only, it assumes a lot of defaults
void writeVideoTrack(EbmlGlobal *ebml, unsigned int trackNumber, int flagLacing,
char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
const char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
double frameRate);
void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
char *codecId, double samplingFrequency, unsigned int channels,
const char *codecId, double samplingFrequency, unsigned int channels,
unsigned char *private_, unsigned long privateSize);
void writeSimpleBlock(EbmlGlobal *ebml, unsigned char trackNumber, short timeCode,

Просмотреть файл

@ -0,0 +1,37 @@
diff --git a/WebMElement.c b/WebMElement.c
--- a/WebMElement.c
+++ b/WebMElement.c
@@ -56,7 +56,7 @@
}
void writeVideoTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
- char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
+ const char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
double frameRate) {
EbmlLoc start;
UInt64 trackID;
@@ -79,7 +79,7 @@
Ebml_EndSubElement(glob, &start); // Track Entry
}
void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
- char *codecId, double samplingFrequency, unsigned int channels,
+ const char *codecId, double samplingFrequency, unsigned int channels,
unsigned char *private, unsigned long privateSize) {
EbmlLoc start;
UInt64 trackID;
diff --git a/WebMElement.h b/WebMElement.h
--- a/WebMElement.h
+++ b/WebMElement.h
@@ -20,10 +20,10 @@
void writeSegmentInformation(EbmlGlobal *ebml, EbmlLoc *startInfo, unsigned long timeCodeScale, double duration);
// this function is a helper only, it assumes a lot of defaults
void writeVideoTrack(EbmlGlobal *ebml, unsigned int trackNumber, int flagLacing,
- char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
+ const char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
double frameRate);
void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
- char *codecId, double samplingFrequency, unsigned int channels,
+ const char *codecId, double samplingFrequency, unsigned int channels,
unsigned char *private_, unsigned long privateSize);
void writeSimpleBlock(EbmlGlobal *ebml, unsigned char trackNumber, short timeCode,