opusfile.git
8 days agoop_fetch_and_process_page: Fix int64 overflow master
James Zern [Thu, 7 Dec 2017 23:25:28 +0000 (15:25 -0800)]
op_fetch_and_process_page: Fix int64 overflow

Check for overflow with a negative diff.

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
8 days agoop_pcm_seek: Fix int64 overflow
James Zern [Thu, 7 Dec 2017 23:24:48 +0000 (15:24 -0800)]
op_pcm_seek: Fix int64 overflow

Calculate discard_count directly with op_granpos_diff. this works
because _pcm_offset == (target_gp - pcm_start) and diff == (gp -
pcm_start).

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
4 weeks agoUpdate soname revision for the 0.10 release. v0.10
Ralph Giles [Tue, 14 Nov 2017 18:29:39 +0000 (10:29 -0800)]
Update soname revision for the 0.10 release.

4 weeks agoForce crlf line endings for VS2015 project files.
Pavel P [Sat, 12 Aug 2017 20:02:11 +0000 (13:02 -0700)]
Force crlf line endings for VS2015 project files.

Signed-off-by: Ralph Giles <giles@thaumas.net>
6 weeks agoAdd macOS and clang builds to the travis config.
Stephen [Mon, 30 Oct 2017 21:53:25 +0000 (14:53 -0700)]
Add macOS and clang builds to the travis config.

Improve coverage by building more variants in integration
testing.

There's no equivalent of the apt addon for macOS builds, so
we put dependencies in Brewfile and call `brew bundle` to
install them. This works better than calling `brew install`
directly since the later will error if a package is already
installed, and even if the error is ignored it won't update
to the latest version available, resulting in binaried built
against e.g. vulnerable versions of openssl.

To avoid conflicts with Apple's deprecated openssl package,
homebrew doesn't install its openssl package in the default
search path, so we need to manually append the its location
to PKG_CONFIG_PATH. We cannot build against Apple's package
because while it provides libraries and an openssl.pc file,
no headers are available.

Signed-off-by: Ralph Giles <giles@thaumas.net>
6 weeks agoRemove unneeded travis lines.
Stephen [Mon, 30 Oct 2017 21:48:00 +0000 (14:48 -0700)]
Remove unneeded travis lines.

Ubuntu 14.04 (trusty) is the current default, so we don't need to specify.

Using the apt addon means we no longer need sudo access.

Signed-off-by: Ralph Giles <giles@thaumas.net>
3 months agoFix out-of-bounds read in serialno matching logic
Timothy B. Terriberry [Tue, 12 Sep 2017 21:29:25 +0000 (14:29 -0700)]
Fix out-of-bounds read in serialno matching logic

We very carefully ensured _cur_link + 1 was in bounds, and then
 dereferenced nlinks + 1 (guaranteed to be out of bounds) instead.
Introduced in commit f83675ebbd79.

Thanks to the Google Autfuzz project for the report.

Fixes #2326

4 months agomingw: Update to opus 1.2.1. v0.9
Ralph Giles [Wed, 2 Aug 2017 23:40:17 +0000 (16:40 -0700)]
mingw: Update to opus 1.2.1.

New release of the codec reference implementation.

4 months agoMinor win32 warning fix.
Timothy B. Terriberry [Wed, 2 Aug 2017 21:49:56 +0000 (14:49 -0700)]
Minor win32 warning fix.

op_fopen() and op_freopen() declare these arguments as non-NULL,
 so when building with mingw, the compiler reasonably complains
 when we check to see if they're NULL.
We could remove the OP_ARG_NONNULL tags, but the behavior of
 _wopen/_wfreopen appears to be to crash on NULL for either
 parameter.
On Linux, the behavior appears to be to handle a NULL path (fopen
 returns NULL with errno set to EFAULT, and freopen returns the
 passed FILE * with errno set to EFAULT), but crash on a NULL mode.
Keeping the OP_ARG_NONNULL tags promises that passing NULL results
 in undefined behavior, which is at least consistent with the
 behavior being different on different platforms.
It's also consistent with the ABI promises of previous releases,
 which compilers linking against libopusfile might have taken
 advantage of.

4 months agoUpdate soname for the opusfile 0.9 release.
Ralph Giles [Wed, 2 Aug 2017 21:38:51 +0000 (14:38 -0700)]
Update soname for the opusfile 0.9 release.

The return type of op_serialno changed from ogg_uint32
to opus_uint32, but those types should be abi compatible.

4 months agomingw: Update to opus 1.2.
Ralph Giles [Wed, 2 Aug 2017 21:38:10 +0000 (14:38 -0700)]
mingw: Update to opus 1.2.

New release of the codec reference implementation.

4 months agomingw: Use an https url for downloading libogg.
Ralph Giles [Wed, 2 Aug 2017 21:37:14 +0000 (14:37 -0700)]
mingw: Use an https url for downloading libogg.

downloads.xiph.org recently got https support.

4 months agoFix a formatting nit.
Ralph Giles [Wed, 2 Aug 2017 21:07:10 +0000 (14:07 -0700)]
Fix a formatting nit.

4 months agoDisable building latex documentation on ci.
Thomas Daede [Wed, 2 Aug 2017 00:27:04 +0000 (17:27 -0700)]
Disable building latex documentation on ci.

The documentation currently fails to build on Jenkins due to
hyperref and doxygen not playing nicely with each other on
Debian Stretch.

4 months agoPrint a useful error when pkg-config is missing
Timothy B. Terriberry [Tue, 1 Aug 2017 23:49:32 +0000 (16:49 -0700)]
Print a useful error when pkg-config is missing

Without this check, the PKG_CHECK_MODULES() macro remains
unexpanded, which gives a syntax error when the shell reaches that
point in the configure script, even for checks which are disabled
(e.g., the OpenSSL check when using --disable-http).

Instead, explicitly check for pkg-config and give the user useful
advice on how to solve the problem if it's not found.

Thanks to eXpl0it3r for reporting a problem for which installing
pkg-config turned out to be the solution.

5 months agoImprove source/stream terminology consistency
Timothy B. Terriberry [Fri, 7 Jul 2017 21:36:18 +0000 (14:36 -0700)]
Improve source/stream terminology consistency

We inherited the term "source" from vorbisfile's "datasource", but
 were using it interchangeably with stream.
At least one user did not even realize the that the _source
 parameter passed to op_open_callbacks() was the same as the
 _stream parameter taken by those callbacks, which is reasonable
 because we never said so.
Consistently use "stream" instead of "source" in both the
 documentation and the code.

5 months agoMinor documentation cross-reference.
Timothy B. Terriberry [Fri, 7 Jul 2017 21:14:25 +0000 (14:14 -0700)]
Minor documentation cross-reference.

Let people reading about the output_gain field know how to change
 the way it gets applied.

5 months agohttp: Fix assertion broken for IPv6 addresses.
Timothy B. Terriberry [Sat, 17 Jun 2017 19:16:59 +0000 (12:16 -0700)]
http: Fix assertion broken for IPv6 addresses.

These two asserts used to be in separate branches, but the code was
 consolidated into a single branch by e63503349f3f.
However, the asserts were not updated at the same time.
With an IPv6 address, the sockaddr_in assert would always fail.

6 months agoPropogate openssl CFLAGS to the opusurl build.
Ralph Giles [Wed, 7 Jun 2017 18:25:58 +0000 (11:25 -0700)]
Propogate openssl CFLAGS to the opusurl build.

We added DEPS_CFLAGS to the general build, but opusurl
has an additional dependency on openssl. If the headers
were outside the normal search path, configure could
succeed but then the build would fail on http.c.

We need to add URL_DEPS_CFLAGS to that specific target.

6 months agomingw: Drop fedora from dist version.
Ralph Giles [Wed, 7 Jun 2017 16:47:29 +0000 (09:47 -0700)]
mingw: Drop fedora from dist version.

I think it's less confusing for most users to omit this. I added
it so I could distinguish the docker-hosted cross package from
others, but it's a distraction for people trying to use the
resulting binaries.

6 months agomingw: Query git for dist version.
Ralph Giles [Wed, 7 Jun 2017 14:55:25 +0000 (07:55 -0700)]
mingw: Query git for dist version.

We build from a git repo, so we can call `git describe` to
generate a version number. When building from a tag, this
should give us a clean release-versioned filename.

6 months agomingw: Bump docker base image to fedora:25.
Ralph Giles [Tue, 6 Jun 2017 21:11:30 +0000 (14:11 -0700)]
mingw: Bump docker base image to fedora:25.

fedora:24 will be end-of-life soon.

6 months agoUpdate mingw dependencies.
Ralph Giles [Fri, 26 May 2017 19:19:21 +0000 (12:19 -0700)]
Update mingw dependencies.

opus 1.1.5
openssl 1.0.2l

There's a newer branch (openssl 1.1.x) availabe now, but the
build script needs changes to make it work. Stay on 1.0.2 for now.

6 months agoFix two compiler warnings.
Timothy B. Terriberry [Wed, 24 May 2017 20:08:44 +0000 (13:08 -0700)]
Fix two compiler warnings.

Thanks to Mark Harris for the report.

6 months agoFix uninitialized free in tag parsing.
Timothy B. Terriberry [Tue, 23 May 2017 22:48:40 +0000 (15:48 -0700)]
Fix uninitialized free in tag parsing.

The tags have two possible representations of the binary suffix
 data.
An implicit one: if comment_lengths and user_comments are NULL,
 then the length of the binary suffix data is 0 and the pointer to
 that data is also implicitly taken to be NULL.
And an explicit one: if comment_lengths and user_comments are
 non-NULL, then comment_lengths[comments] and
 user_comments[comments] contains the length and pointer to the
 binary suffix data (where "comments" is the number of user
 comments).

The implicit one allows us to initialize a tags struct without
 doing any allocations, which ensures it always succeeds.
op_tags_ensure_capacity() may upgrade the implicit representation
 to the explicit representation.
However, when doing so, it stores the implicit (0, NULL) values
 in their new explicit locations at the end of the array assuming
 the requested capacity will become the new size.
If the caller of op_tags_ensure_capacity() then fails before
 enlarging the array to that size, then comment_lengths and
 user_comments will be non-NULL, but the explicit locations for the
 binary suffix data for the _old_ size may not have been
 initialized.

In particular, in opus_tags_parse_impl(), if there was exactly one
 comment, and any of the three checks at the start of the main loop
 failed, then the explicit locations for the binary suffix data
 would remain uninitialized, and the call to opus_tags_clear() in
 the caller would attempt to free them.
For counts larger than 1, the extra line marked "Needed by
 opus_tags_clear()" will update the explicit location as the array
 grows, but with a count of 1 this line never gets a chance to run.

This patch fixes the problem by making op_tags_ensure_capacity()
 promote the implicit representation to explicit at _both_ the old
 and new array sizes.
We could have fixed up opus_tags_parse_impl() to do this instead,
 as suggested in the original bug reports, but doing it this way
 ensures that the tags are always in a valid state when
 op_tags_ensure_capacity() returns.

Thanks to the Google AutoFuzz Team for the report.

Fixes #2324
Fixes #2325

6 months agoMinor documentation fix.
Timothy B. Terriberry [Sat, 13 May 2017 05:23:30 +0000 (22:23 -0700)]
Minor documentation fix.

Clarify that the value returned by op_current_link() is strictly
 less than the value returned by op_link_count() for seekable
 sources.

6 months agoHarmonize op_raw_total() and op_raw_seek()
Timothy B. Terriberry [Sat, 13 May 2017 04:58:46 +0000 (21:58 -0700)]
Harmonize op_raw_total() and op_raw_seek()

op_raw_seek() will fail if you try to seek to a byte position
 beyond the end of the file.
However, the "end" is defined in terms of _of->end, which is
 specifically the end of the last Ogg page found in the underlying
 source (excluding any trailing non-Ogg data).
op_raw_total(_of,-1) returns the total size of the stream by using
 _of->end, but it was also subtracting the offset of the first Opus
 page in the first link.
Since there might have been other Ogg streams concurrently
 multiplexed with the first Opus stream whose BOS pages appear
 first, or there might simply be non-Ogg junk at the start, that
 left the caller with no way to determine the valid range of byte
 offsets that could be passed to op_raw_seek().

Instead, make op_raw_total() pretend the first link starts at
 offset 0, and explicitly document that it's what defines the range
 of valid values to op_raw_seek().
This is how our own seeking_example.c was using it, anyway.

6 months agoImprove handling of holes (corrupt pages).
Timothy B. Terriberry [Sat, 13 May 2017 00:49:53 +0000 (17:49 -0700)]
Improve handling of holes (corrupt pages).

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.

6 months agoAvoid operations linear in the number of links.
Timothy B. Terriberry [Fri, 12 May 2017 23:02:38 +0000 (16:02 -0700)]
Avoid operations linear in the number of links.

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.

6 months agoMinor comment updates.
Timothy B. Terriberry [Fri, 12 May 2017 20:17:10 +0000 (13:17 -0700)]
Minor comment updates.

No code changes.

6 months agoUse OpenSSL's hostname validation if available.
Timothy B. Terriberry [Sat, 31 Dec 2016 14:33:40 +0000 (06:33 -0800)]
Use OpenSSL's hostname validation if available.

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.

6 months agoFix two minor errors in hostname validation.
Timothy B. Terriberry [Sat, 31 Dec 2016 14:25:31 +0000 (06:25 -0800)]
Fix two minor errors in hostname validation.

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.

9 months agoFix minor typo in return type of op_serialno()
sezero [Tue, 7 Mar 2017 08:11:10 +0000 (11:11 +0300)]
Fix minor typo in return type of op_serialno()

If, e.g. using a differently configured config_types.h with a long
vs. int conflict in the int32 typedef, this would have resulted in
a build failure.

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
10 months agoUse ASN1_STRING_get0_data for openssl-1.1.0
eroen [Mon, 2 Jan 2017 18:50:07 +0000 (19:50 +0100)]
Use ASN1_STRING_get0_data for openssl-1.1.0

This fixes a build failure from undefined references to ASN1_STRING_data in
libopusurl.so.

ASN1_STRING_data is deprecated in openssl-1.1.0. The new ASN1_STRING_get0_data
is identical, except the returned string may not be modified, which we don't
do anyway.

Also include missing asn1.h header to silence compiler warnings.

X-Gentoo-Bug: 592456
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=592456

13 months agomingw: Don't use deltarpm reconstruction.
Ralph Giles [Tue, 8 Nov 2016 06:29:52 +0000 (22:29 -0800)]
mingw: Don't use deltarpm reconstruction.

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.

13 months agoFix typo in assertion.
Ralph Giles [Fri, 4 Nov 2016 23:51:49 +0000 (16:51 -0700)]
Fix typo in assertion.

Commit d0c82543d55f1f5938460022777301b8de023bc9 broke builds
with --enable-assertions with error: 'tag_len' undeclared.

Fixing the simple typo in the symbol reference resolves the issue.

13 months agomingw: README.txt -> README.md.
Ralph Giles [Fri, 4 Nov 2016 22:09:38 +0000 (15:09 -0700)]
mingw: README.txt -> README.md.

The file in the parent directory was renamed; change the
reference in the Makefile as well.

13 months agomingw: Base docker container on Fedora 24.
Ralph Giles [Fri, 4 Nov 2016 21:50:40 +0000 (14:50 -0700)]
mingw: Base docker container on Fedora 24.

13 months agomingw: update to openssl 1.0.2j.
Ralph Giles [Fri, 4 Nov 2016 21:31:13 +0000 (14:31 -0700)]
mingw: update to openssl 1.0.2j.

Latest stable release.

13 months agomingw: update to opus 1.1.3.
Ralph Giles [Fri, 4 Nov 2016 21:28:31 +0000 (14:28 -0700)]
mingw: update to opus 1.1.3.

Build against latest stable upstream release.

13 months agomingw: Correct README typo.
Ralph Giles [Fri, 4 Nov 2016 21:24:33 +0000 (14:24 -0700)]
mingw: Correct README typo.

13 months agoMake dot optional in generating documentation.
Ralph Giles [Fri, 4 Nov 2016 21:22:19 +0000 (14:22 -0700)]
Make dot optional in generating documentation.

Different distributions of doxygen have different default
values of HAVE_DOT setting, so we need to pick a specific
setting to avoid 'missing dot' warnings on some platforms.

Doxygen uses it to generate inclusion graphs for our various
header files, which is somewhat useful, but not essential.
We therefore enable dot if it's present (usually through
the parent graphviz package) but disable it if it's not
available, silencing the warning, but not giving uniform
results.

14 months agoAdd jenkins build status icon.
Ralph Giles [Wed, 28 Sep 2016 15:45:14 +0000 (08:45 -0700)]
Add jenkins build status icon.

14 months agoUse the appveyor badge for the xiph github repo.
Ralph Giles [Wed, 21 Sep 2016 19:22:14 +0000 (12:22 -0700)]
Use the appveyor badge for the xiph github repo.

14 months agoUpdate release checklist for README.md.
Timothy B. Terriberry [Wed, 21 Sep 2016 17:12:37 +0000 (10:12 -0700)]
Update release checklist for README.md.

14 months agoAdd badges
Chocobo1 [Sun, 31 Jul 2016 02:16:22 +0000 (10:16 +0800)]
Add badges

14 months agoModernize README
Chocobo1 [Sun, 31 Jul 2016 02:10:56 +0000 (10:10 +0800)]
Modernize README

Adopt markdown format

14 months agoFix MSVC warnings.
Timothy B. Terriberry [Fri, 16 Sep 2016 22:41:27 +0000 (15:41 -0700)]
Fix MSVC warnings.

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).

16 months agoappveyor: Don't compile OpenSSL for the Release-NoHTTP configuration.
Ricardo Constantino (:RiCON) [Thu, 28 Jul 2016 22:10:38 +0000 (23:10 +0100)]
appveyor: Don't compile OpenSSL for the Release-NoHTTP configuration.

The dependency isn't needed in this case, and it speeds up
the test considerably.

Signed-off-by: Ralph Giles <giles@thaumas.net>
16 months agoVS2015: Add Release configuration without OpenSSL dependency.
Ricardo Constantino (:RiCON) [Thu, 28 Jul 2016 20:17:24 +0000 (21:17 +0100)]
VS2015: Add Release configuration without OpenSSL dependency.

Using a custom config.h isn't enough, since additional libs have to
be available whether OP_ENABLE_HTTP is defined or not.

Don't bother compiling OpenSSL in Appveyor in this one.

Signed-off-by: Ralph Giles <giles@thaumas.net>
16 months agoVS2015: Depend on OpenSSL.
Ricardo Constantino (:RiCON) [Thu, 28 Jul 2016 01:03:02 +0000 (02:03 +0100)]
VS2015: Depend on OpenSSL.

Signed-off-by: Ralph Giles <giles@thaumas.net>
16 months agoappveyor: Compile static openssl from git to use with opusfile.
Ricardo Constantino (:RiCON) [Thu, 28 Jul 2016 00:58:38 +0000 (01:58 +0100)]
appveyor: Compile static openssl from git to use with opusfile.

Stable branch used because master is on 1.1.x which doesn't work.

Signed-off-by: Ralph Giles <giles@thaumas.net>
16 months agoAdd appveyor.yml to test VS2015 builds.
Ricardo Constantino (:RiCON) [Wed, 27 Jul 2016 14:18:52 +0000 (15:18 +0100)]
Add appveyor.yml to test VS2015 builds.

Signed-off-by: Ralph Giles <giles@thaumas.net>
16 months agoRemove VS2010 projects.
Ricardo Constantino (:RiCON) [Tue, 26 Jul 2016 20:48:19 +0000 (21:48 +0100)]
Remove VS2010 projects.

Signed-off-by: Ralph Giles <giles@thaumas.net>
16 months agoAdd VS2015 projects.
Ricardo Constantino (:RiCON) [Tue, 26 Jul 2016 22:04:10 +0000 (23:04 +0100)]
Add VS2015 projects.

Signed-off-by: Ralph Giles <giles@thaumas.net>
16 months agowin32: Add gitignore.
Ricardo Constantino (:RiCON) [Tue, 26 Jul 2016 20:09:32 +0000 (21:09 +0100)]
win32: Add gitignore.

Signed-off-by: Ralph Giles <giles@thaumas.net>
17 months agoAdd a travis build file.
Ralph Giles [Thu, 7 Jul 2016 22:28:01 +0000 (15:28 -0700)]
Add a travis build file.

It seems we have to run this on ubuntu trusty images to satisfy
the libopus-dev dependency, which currently requires sudo
(I think as proxy to trigger a non-docker image?) and is
therefore slower than vanilla container builds.

17 months agoUpdate dependencies for the mingw build.
Ralph Giles [Wed, 6 Jul 2016 21:41:04 +0000 (14:41 -0700)]
Update dependencies for the mingw build.

17 months agoAdd release checksums for opusfile 0.8.
Ralph Giles [Wed, 6 Jul 2016 17:43:01 +0000 (10:43 -0700)]
Add release checksums for opusfile 0.8.

17 months agoFix typo in release checklist. v0.8
Ralph Giles [Wed, 6 Jul 2016 17:29:12 +0000 (10:29 -0700)]
Fix typo in release checklist.

17 months agoBump soname for v0.8.
Ralph Giles [Wed, 6 Jul 2016 17:21:04 +0000 (10:21 -0700)]
Bump soname for v0.8.

No public API changes.

17 months agoAdd support for OpenSSL 1.1.x.
Timothy B. Terriberry [Wed, 6 Jul 2016 16:36:16 +0000 (09:36 -0700)]
Add support for OpenSSL 1.1.x.

The API and ABI is not backwards-compatible.
This is based on the prerelease version 1.1.0-pre5.
It should continue to work with older versions of OpenSSL.

Thanks to Ron Lee and the Debian project for reporting the build
 errors and testing the patch.

17 months agoAdd comment explaining fix in 72f4f8a6c2c3.
Timothy B. Terriberry [Mon, 4 Jul 2016 02:12:49 +0000 (19:12 -0700)]
Add comment explaining fix in 72f4f8a6c2c3.

17 months agoFix free with uninitialized data in opus_tags_parse().
Timothy B. Terriberry [Mon, 4 Jul 2016 02:03:18 +0000 (19:03 -0700)]
Fix free with uninitialized data in opus_tags_parse().

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 0221ca95fc58.

17 months agoAdd missing NULL check to opus_tags_parse().
Timothy B. Terriberry [Mon, 4 Jul 2016 01:50:09 +0000 (18:50 -0700)]
Add missing NULL check to opus_tags_parse().

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
 0221ca95fc58 did not check for this.

Fixes Coverity CID 149873.

17 months agoFix NULL check in opus_tags_add_comment().
Timothy B. Terriberry [Mon, 4 Jul 2016 01:43:26 +0000 (18:43 -0700)]
Fix NULL check in opus_tags_add_comment().

In 0221ca95fc58 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.

17 months agoFix skipping logic for multiplexed non-Opus pages.
Timothy B. Terriberry [Mon, 4 Jul 2016 01:21:58 +0000 (18:21 -0700)]
Fix skipping logic for multiplexed non-Opus pages.

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.

17 months agoNote small inaccuracy in bitrate tracking.
Timothy B. Terriberry [Mon, 4 Jul 2016 01:10:16 +0000 (18:10 -0700)]
Note small inaccuracy in bitrate tracking.

In the non-seekable case, we'll undercount some bytes at the start
 of a new link.
Still thinking about the best way to address this, but leaving a
 comment so I don't forget.

17 months agoShould a BOS page with no packets be an error?
Timothy B. Terriberry [Mon, 4 Jul 2016 00:46:26 +0000 (17:46 -0700)]
Should a BOS page with no packets be an error?

Going with "no" for now, but leave a reminder in the source code
 that this is a debatable question.

17 months agoMinor comment typo fix.
Timothy B. Terriberry [Sun, 26 Jun 2016 22:04:07 +0000 (15:04 -0700)]
Minor comment typo fix.

17 months agoMinor comment typo fixes.
Timothy B. Terriberry [Sun, 19 Jun 2016 15:37:09 +0000 (08:37 -0700)]
Minor comment typo fixes.

18 months agoRemove readp argument to op_fetch_and_process_page().
Timothy B. Terriberry [Thu, 16 Jun 2016 03:50:26 +0000 (20:50 -0700)]
Remove readp argument to op_fetch_and_process_page().

This was set to 1 by all callers, so we can simplify logic by just
 removing it.
This appears to have already been true in the libvorbisfile code
 from which this was adapted.

18 months agoMinor documentation updates.
Timothy B. Terriberry [Thu, 16 Jun 2016 03:34:35 +0000 (20:34 -0700)]
Minor documentation updates.

Just improving the clarity in some places.

18 months agoIgnore documentation output directories.
Ralph Giles [Wed, 1 Jun 2016 00:46:48 +0000 (17:46 -0700)]
Ignore documentation output directories.

18 months agoMention attaching tarballs to github.
Ralph Giles [Wed, 1 Jun 2016 00:44:34 +0000 (17:44 -0700)]
Mention attaching tarballs to github.

Github offers the `git archive` output of each tag as a
"release tarball", bypassing the `make dist` process and
confusing people who find those download artifacts. Better
to at least offer the official releases alongside those.

23 months agoAdd release checksums for opusfile 0.7.
Ralph Giles [Wed, 6 Jan 2016 01:47:55 +0000 (17:47 -0800)]
Add release checksums for opusfile 0.7.

23 months agoMerge the generic bits of the release notes into the readme. v0.7
Ralph Giles [Tue, 5 Jan 2016 00:17:24 +0000 (16:17 -0800)]
Merge the generic bits of the release notes into the readme.

Also switch to markdown-style headings to the benefit of github.

23 months agomingw: Bump docker base to Fedora 23.
Ralph Giles [Tue, 5 Jan 2016 00:07:17 +0000 (16:07 -0800)]
mingw: Bump docker base to Fedora 23.

This build works as well. I'm not sure what's wrong with my
local environment.

23 months agomingw: Building on Fedora 22 works as well.
Ralph Giles [Fri, 1 Jan 2016 02:07:21 +0000 (18:07 -0800)]
mingw: Building on Fedora 22 works as well.

23 months agomingw: Add a package target.
Ralph Giles [Fri, 1 Jan 2016 01:45:46 +0000 (17:45 -0800)]
mingw: Add a package target.

This does the basics to build the win32 binary release zipfile
for testing. Doesn't sign or version it properly.

23 months agomingw: Build just deps by default, not that static opusfile.
Ralph Giles [Fri, 1 Jan 2016 01:44:22 +0000 (17:44 -0800)]
mingw: Build just deps by default, not that static opusfile.

23 months agomingw: Bump docker build to Fedora 21.
Ralph Giles [Fri, 1 Jan 2016 01:26:39 +0000 (17:26 -0800)]
mingw: Bump docker build to Fedora 21.

The version of mingw in Fedora 21 works as well.
This is the first version to depend on libwinpthread.

Also add an autogen.sh invocation which caused the previous
build to fail after the 'make check' barrier was removed.

23 months agomingw: remove 'make check' steps.
Ralph Giles [Fri, 1 Jan 2016 00:10:30 +0000 (16:10 -0800)]
mingw: remove 'make check' steps.

This requires wine to run the windows executables, which is a
pretty heavy dependency. Better to do without for now.

23 months agomingw: Add a Dockerfile describing cross build.
Ralph Giles [Fri, 1 Jan 2016 00:07:56 +0000 (16:07 -0800)]
mingw: Add a Dockerfile describing cross build.

For some reason, when I cross-compile opusfile on Fedora 23,
I get example binaries with exit immediately without error.

Building them on Fedora 20 (in a docker container) produced
working binaries. Until we figure out what the bug is, include
this for convenience.

The build doesn't actually work because of the 'make check'
steps in the Makefile, which require wine.

23 months agoFix typo.
Ralph Giles [Fri, 1 Jan 2016 00:07:36 +0000 (16:07 -0800)]
Fix typo.

23 months agoAdd release checksums for win32 binary builds.
Ralph Giles [Thu, 31 Dec 2015 21:14:31 +0000 (13:14 -0800)]
Add release checksums for win32 binary builds.

Verified against archive.mozilla.org and the original builds
on my machine.

23 months agoAdd release checksums.
Ralph Giles [Thu, 31 Dec 2015 21:08:46 +0000 (13:08 -0800)]
Add release checksums.

Keep a copy of the release tarball SHA-256 checksums in the
repository for reference. Having a copy with the code in
distributed version control adds a verification path.

This should match the opusfile checksums in
https://archive.mozilla.org/pub/opus/SHA256SUMS.txt and
http://downloads.xiph.org/releases/opus/SHA256SUMS.txt

23 months agomingw: Add fetch and realclean targets for downloading dependencies.
Ralph Giles [Thu, 31 Dec 2015 10:04:18 +0000 (02:04 -0800)]
mingw: Add fetch and realclean targets for downloading dependencies.

For those who would like network access to be a separate step.

23 months agomingw: Fix clean target.
Ralph Giles [Thu, 31 Dec 2015 09:58:51 +0000 (01:58 -0800)]
mingw: Fix clean target.

23 months agomingw: Use $(CURDIR) instead of ${PWD}.
Ralph Giles [Thu, 31 Dec 2015 09:57:11 +0000 (01:57 -0800)]
mingw: Use $(CURDIR) instead of ${PWD}.

This doesn't work in a normal shell, but enables 'make -C mingw'
which is convenient.

Thanks to ron for the suggestion.

23 months agoFix typo.
Ralph Giles [Thu, 31 Dec 2015 09:34:54 +0000 (01:34 -0800)]
Fix typo.

23 months agoUpdate release instructions.
Ralph Giles [Thu, 31 Dec 2015 09:16:10 +0000 (01:16 -0800)]
Update release instructions.

These may not be final since the mingw build wasn't successful
but includes updates from following the process today.

23 months agoBump soname for v0.7.
Ralph Giles [Thu, 31 Dec 2015 00:16:47 +0000 (16:16 -0800)]
Bump soname for v0.7.

We have added new public interfaces, but are still backward
compatible with clients built against older releases.

23 months agoUpdate release instructions for mingw makefile.
Ralph Giles [Wed, 30 Dec 2015 23:58:56 +0000 (15:58 -0800)]
Update release instructions for mingw makefile.

Have successfully automated the build, but packaging
is still manual.

23 months agoUpdate release instructions for new archive locations.
Ralph Giles [Wed, 30 Dec 2015 23:58:12 +0000 (15:58 -0800)]
Update release instructions for new archive locations.

ftp.mozilla.org is now s3-backed archive.mozilla.org.
Old urls should redirect.

23 months agoAdd a makefile for cross-compiling on mingw.
Ralph Giles [Wed, 30 Dec 2015 22:25:55 +0000 (14:25 -0800)]
Add a makefile for cross-compiling on mingw.

This builds win32 versions of the library and examples
on linux using the mingw-gcc cross toolchain and wine.

It also automates downloading and building the
required dependencies. Update the _URL and _SHA
variables to build against newer upstream releases.

Thanks to Ron and Mark Harris for help with the makefile.

23 months agoFix potential memory leaks with OpusServerInfo.
Timothy B. Terriberry [Wed, 30 Dec 2015 13:23:32 +0000 (05:23 -0800)]
Fix potential memory leaks with OpusServerInfo.

In op_[v]open_url() and op_[v]test_url(), if we successfully
 connected to the URL but fail to parse it as an Opus stream, then
 we would return to the calling application without clearing any
 OpusServerInfo we might have filled in when connecting.
This contradicts the general contract for user output buffers in
 our APIs, which is that they do not need to be initialized prior
 to a call and that their contents are untouched if a function
 fails (so that an application need do no additional clean-up on
 error).
It would have been possible for an application to avoid these leaks
 by always calling opus_server_info_init() before a call to
 op_[v]open_url() or op_[v]test_url() and always calling
 opus_server_info_clear() afterwards (even on failure), but our
 examples don't do this and no other API of ours requires it.

Fix the potential leaks by wrapping the implementation of
 op_url_stream_vcreate() so we can a) tell if the information was
 requested and b) store it in a separate, local buffer and delay
 copying it to the application until we know we've succeeded.

23 months agoAdd API to access and preserve binary metadata.
Timothy B. Terriberry [Wed, 30 Dec 2015 02:10:07 +0000 (18:10 -0800)]
Add API to access and preserve binary metadata.

This adds support for accessing any binary metadata at the end of
 the comment header, as first specified in
 <https://tools.ietf.org/html/draft-ietf-codec-oggopus-05>.
It also allows the data to be set and preserves the data when
 doing deep copies.

23 months agoAdd support for R128_ALBUM_GAIN tag.
Timothy B. Terriberry [Tue, 29 Dec 2015 22:36:25 +0000 (14:36 -0800)]
Add support for R128_ALBUM_GAIN tag.

This includes convenience routines specifying the album gain should
 be applied and for parsing the tag.

2 years agoBuffer continued packet data to reduce seeking.
Timothy B. Terriberry [Tue, 15 Dec 2015 21:56:34 +0000 (13:56 -0800)]
Buffer continued packet data to reduce seeking.

In commit 41c29626afbd I claimed that it was not worth the
 machinery to buffer an extra page to avoid a seek when we have
 continued packet data.
That was a little unsatisfying, considering how much effort we make
 to avoid unnecessary seeking elsewhere, but in the general case,
 we might have to buffer an arbitrary number of pages, since a
 packet can span several.
However, we already have the mechanism to do this buffering: the
 ogg_stream_state.
There are a number of potentially nasty corner-cases, but libogg's
 page sequence number tracking prevents us from accidentally gluing
 extraneous packet data onto some other unsuspecting packet, so I
 believe the chance of introducing new bugs here is manageable.

This reduces the number of seeks in Simon Jackson's continued-page
 test case by over 23%.

This also means we can handle pages without useful timestamps
 (including those multiplexed from another stream) between the last
 timestamped page at or before our target and the first timestamped
 page after our target without any additional seeks.
Previously we would scan all of this data, see that the
 'page_offset' of the most recent page we read was way beyond
 'best' (the end of the last timestamped page before our target),
 and then seek back and scan it all again.
This should greatly reduce the number of seeks we need in
 multiplexed streams, even if there are no continued packets.