diff options
author | Ray Essick <essick@google.com> | 2016-07-06 10:13:25 -0700 |
---|---|---|
committer | gitbuildkicker <android-build@google.com> | 2016-07-21 17:29:23 -0700 |
commit | f9391b39b1f0c98191ad3fff1a54b5f26e954421 (patch) | |
tree | 4a32d735477bd2eaa3307f66d9841b0d400d095d /media | |
parent | 49a847e0f6558849adef32d64d2a1093fc527c96 (diff) | |
download | frameworks_av-f9391b39b1f0c98191ad3fff1a54b5f26e954421.zip frameworks_av-f9391b39b1f0c98191ad3fff1a54b5f26e954421.tar.gz frameworks_av-f9391b39b1f0c98191ad3fff1a54b5f26e954421.tar.bz2 |
Fix corruption via buffer overflow in mediaserver
change unbound sprintf() to snprintf() so network-provided values
can't overflow the buffers.
Applicable to all K/L/M/N branches.
Bug: 25747670
Change-Id: Id6a5120c2d08a6fbbd47deffb680ecf82015f4f6
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/rtsp/ASessionDescription.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/media/libstagefright/rtsp/ASessionDescription.cpp b/media/libstagefright/rtsp/ASessionDescription.cpp index 98498e9..47573c3 100644 --- a/media/libstagefright/rtsp/ASessionDescription.cpp +++ b/media/libstagefright/rtsp/ASessionDescription.cpp @@ -17,6 +17,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "ASessionDescription" #include <utils/Log.h> +#include <cutils/log.h> #include "ASessionDescription.h" @@ -211,12 +212,12 @@ void ASessionDescription::getFormatType( *PT = x; - char key[20]; - sprintf(key, "a=rtpmap:%lu", x); + char key[32]; + snprintf(key, sizeof(key), "a=rtpmap:%lu", x); CHECK(findAttribute(index, key, desc)); - sprintf(key, "a=fmtp:%lu", x); + snprintf(key, sizeof(key), "a=fmtp:%lu", x); if (!findAttribute(index, key, params)) { params->clear(); } @@ -228,8 +229,11 @@ bool ASessionDescription::getDimensions( *width = 0; *height = 0; - char key[20]; - sprintf(key, "a=framesize:%lu", PT); + char key[33]; + snprintf(key, sizeof(key), "a=framesize:%lu", PT); + if (PT > 9999999) { + android_errorWriteLog(0x534e4554, "25747670"); + } AString value; if (!findAttribute(index, key, &value)) { return false; |