Skip to content
Snippets Groups Projects
  1. May 19, 2017
    • Timothy B. Terriberry's avatar
      Improve handling of holes (corrupt pages). · fd65b94f
      Timothy B. Terriberry authored
      Previously, when we encountered a hole (a gap in the page sequence
       numbers), we would save off all of the packets from the first page
       after the hole, but not timestamp them.
      That meant when they were actually decoded, op_pcm_tell() would
       report a timestamp of 0 until reaching the last packet on that
       page.
      
      Instead, handle holes just like a raw seek.
      We reset the granule position tracking, and attempt to timestamp
       packets backwards from the end of the page.
      If the first page after the hole is an EOS page, we just throw it
       away (rather than risk playing invalid samples due to incorrect
       end-trimming).
      We also throw away the first 80 ms of audio after a hole, to allow
       the decoder state to reconverge.
      
      This patch also updates the example to report the hole and
       continue decoding, rather than immediately stopping when a hole is
       encountered, in order to test the above features.
      fd65b94f
    • Timothy B. Terriberry's avatar
      Avoid operations linear in the number of links. · f83675eb
      Timothy B. Terriberry authored
      Just in case some bozo makes a chained stream with 272,389 links
       with 16 samples in each (coded at 16 Mbps, including overheads).
      This avoids quadratic behavior for simple straight-through
       playback: we no longer do a linear search on each chain boundary
       or each call to op_pcm_tell().
      N seeks with M chains still requires O(N*log(M)) work.
      f83675eb
    • Timothy B. Terriberry's avatar
      Minor comment updates. · 21ebba38
      Timothy B. Terriberry authored
      No code changes.
      21ebba38
    • Timothy B. Terriberry's avatar
      Use OpenSSL's hostname validation if available. · cc1fff58
      Timothy B. Terriberry authored
      As of version 1.0.2, OpenSSL can finally do automatic hostname
       validation for us.
      Their implementation is likely to have received much better review
       than ours, and there are other good reasons to prefer it, so use it
       when we can.
      cc1fff58
    • Timothy B. Terriberry's avatar
      Fix two minor errors in hostname validation. · 0a94cf8f
      Timothy B. Terriberry authored
      RFC 6125 says that if the host is an IP address, a subjectAltName of
       type iPAddress must (no 2119 caps) be present and must be used.
      We would still fall back to checking the Common Name if no
       subjectAltName was present.
      
      https://marc.info/?l=openssl-dev&m=139617145216047&w=2 interprets
       RFC 6125 to say that if the host is a DNS name, but the certificate
       only contains a subjectAltName of type iPAddress, then we should
       still fall back to checking the Common Name.
      We would only check the Common Name if there was no subjectAltName
       of any type.
      
      Restructure the hostname validation to check IP addresses up-front
       and fall back to checking the Common Name in the proper cases.
      0a94cf8f
  2. Mar 10, 2017
  3. Feb 08, 2017
  4. Nov 08, 2016
    • Ralph Giles's avatar
      mingw: Don't use deltarpm reconstruction. · 6a08376d
      Ralph Giles authored
      The fedora docker images ship without the necessary metadata
      to reconstruct rpm packages from installed data, so attempting
      to download delta rpm packages when updating the system just
      wastes time and bandwidth.
      6a08376d
  5. Nov 04, 2016
  6. Sep 28, 2016
  7. Sep 21, 2016
  8. Sep 16, 2016
    • Timothy B. Terriberry's avatar
      Fix MSVC warnings. · d0c82543
      Timothy B. Terriberry authored
      Some of these pointed to real potential overflows (given arbitrary
       inputs by the calling application).
      I was sad about stripping const qualifiers from the struct addrinfo
       pointers, but MSVC seems to erroneously think that an array of
       pointers to constant data is itself a pointer to constant data (or
       maybe that it is not compatible with a const void *?), and
       converting the memmove()s to for loops triggered an erroneous
       warning about out-of-bounds array accesses in gcc (but on only one
       of the two identical loops).
      d0c82543
  9. Jul 29, 2016
  10. Jul 27, 2016
  11. Jul 08, 2016
  12. Jul 06, 2016
  13. Jul 04, 2016
    • Timothy B. Terriberry's avatar
      d21816d6
    • Timothy B. Terriberry's avatar
      Fix free with uninitialized data in opus_tags_parse(). · 72f4f8a6
      Timothy B. Terriberry authored
      If the parsing fails before all comments are filled in, we will
       attempt to free any binary metadata at the position one past the
       last comment, which will be uninitialized.
      Introduced in commit 0221ca95.
      72f4f8a6
    • Timothy B. Terriberry's avatar
      Add missing NULL check to opus_tags_parse(). · bd607f5c
      Timothy B. Terriberry authored
      According to the API, you can pass in a NULL OpusTags object to
       simply check if the comment packet is valid, without storing the
       parsed results.
      However, the additions to store binary metadata in commit
       0221ca95 did not check for this.
      
      Fixes Coverity CID 149873.
      bd607f5c
    • Timothy B. Terriberry's avatar
      Fix NULL check in opus_tags_add_comment(). · 66a8c158
      Timothy B. Terriberry authored
      In 0221ca95 the allocation result went from being stored
       directly in "_tags->user_comments[ncomments]" to being stored in
       the temporary "comment".
      However, the NULL check for allocation failure was not updated to
       match.
      This meant this function would almost always fail, unless you had
       added binary metadata first.
      
      Fixes Coverity CID 149874.
      66a8c158
    • Timothy B. Terriberry's avatar
      Fix skipping logic for multiplexed non-Opus pages. · 78cd9bcf
      Timothy B. Terriberry authored
      This bug appears to have been present since the original code
       import.
      This was a "clever" rearrangement of the control flow from the
       _fetch_and_process_packet() in vorbisfile to use a do ... while(0)
       instead of a "while(1)".
      However, this also makes "continue" equivalent to "break": it does
       not actually go back to the top of the loop, because the loop
       condition is false.
      
      This bug was harmless, because ogg_stream_pagein() then refuses to
       ingest a page with the wrong serialno, but we can simplify things
       by fixing it.
      The "not strictly necessary" loop is now completely unnecessary.
      The extra checks that existed in vorbisfile have all been moved to
       later in the main loop, so we can just continue that one directly,
       with no wasted work, instead of embedding a smaller loop inside.
      
      Fixes Coverity CID 149875.
      78cd9bcf
Loading