123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /* Copyright (c) 2012 Xiph.Org Foundation
- Written by Jüri Aedla and Ralph Giles */
- /*
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- /* Check for overflow in reading the padding length.
- * http://lists.xiph.org/pipermail/opus/2012-November/001834.html
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "opus.h"
- #include "test_opus_common.h"
- #define PACKETSIZE 16909318
- #define CHANNELS 2
- #define FRAMESIZE 5760
- int test_overflow(void)
- {
- OpusDecoder *decoder;
- int result;
- int error;
- unsigned char *in = malloc(PACKETSIZE);
- opus_int16 *out = malloc(FRAMESIZE*CHANNELS*sizeof(*out));
- fprintf(stderr, " Checking for padding overflow... ");
- if (!in || !out) {
- fprintf(stderr, "FAIL (out of memory)\n");
- return -1;
- }
- in[0] = 0xff;
- in[1] = 0x41;
- memset(in + 2, 0xff, PACKETSIZE - 3);
- in[PACKETSIZE-1] = 0x0b;
- decoder = opus_decoder_create(48000, CHANNELS, &error);
- result = opus_decode(decoder, in, PACKETSIZE, out, FRAMESIZE, 0);
- opus_decoder_destroy(decoder);
- free(in);
- free(out);
- if (result != OPUS_INVALID_PACKET) {
- fprintf(stderr, "FAIL!\n");
- test_failed();
- }
- fprintf(stderr, "OK.\n");
- return 1;
- }
- int main(void)
- {
- const char *oversion;
- int tests = 0;;
- iseed = 0;
- oversion = opus_get_version_string();
- if (!oversion) test_failed();
- fprintf(stderr, "Testing %s padding.\n", oversion);
- tests += test_overflow();
- fprintf(stderr, "All padding tests passed.\n");
- return 0;
- }
|