diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-08-11 11:54:32 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-08-11 11:54:37 +0200 |
commit | 15c92f8c486a91ca2bd8607a088bee2219c34452 (patch) | |
tree | bf238631bc90e87fea4cf9983faadac9bd854317 /libavformat/rtmppkt.c | |
parent | 99091ff217440daa33fddcf66170e1a6d630c3a4 (diff) | |
parent | 5718e3487ba3b26aba341070be0b6b0b4de45ea3 (diff) |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
rtmp: Do not misuse memcmp
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/rtmppkt.c')
-rw-r--r-- | libavformat/rtmppkt.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/libavformat/rtmppkt.c b/libavformat/rtmppkt.c index 6a94d706b1..0982775135 100644 --- a/libavformat/rtmppkt.c +++ b/libavformat/rtmppkt.c @@ -525,3 +525,36 @@ void ff_rtmp_packet_dump(void *ctx, RTMPPacket *p) av_log(ctx, AV_LOG_DEBUG, "\n"); } } + +int ff_amf_match_string(const uint8_t *data, int size, const char *str) +{ + int len = strlen(str); + int amf_len, type; + + if (size < 1) + return 0; + + type = *data++; + + if (type != AMF_DATA_TYPE_LONG_STRING && + type != AMF_DATA_TYPE_STRING) + return 0; + + if (type == AMF_DATA_TYPE_LONG_STRING) { + if ((size -= 4 + 1) < 0) + return 0; + amf_len = bytestream_get_be32(&data); + } else { + if ((size -= 2 + 1) < 0) + return 0; + amf_len = bytestream_get_be16(&data); + } + + if (amf_len > size) + return 0; + + if (amf_len != len) + return 0; + + return !memcmp(data, str, len); +} |