Skip to content

Commit

Permalink
Bug 966044 - Fix unconditional single byte buffer overflow in EbmlCom…
Browse files Browse the repository at this point in the history
…poser::generateHeader(). (r=rillian)
  • Loading branch information
Eric Faust committed Jan 31, 2014
1 parent ff9a54d commit ce1df85
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 9 deletions.
7 changes: 2 additions & 5 deletions content/media/webm/EbmlComposer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
Expand Down
4 changes: 2 additions & 2 deletions media/libmkv/WebMElement.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions media/libmkv/WebMElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
37 changes: 37 additions & 0 deletions media/libmkv/const_fix.patch
Original file line number Diff line number Diff line change
@@ -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,

0 comments on commit ce1df85

Please sign in to comment.