Found some more edge cases in the wild - though to be honest this entire
thing is edge cases. Sometimes /release exists, but the actual binaries
are in /jre/bin; this commit changes behaviour to look for the two
things independently.
If the user cancelled the install process after the temp logging config
file was created, but before the installer executes, the pack would fail
to install on relaunch. Fix by allowing overwriting of the temp file.
Minecraft's default logging configs output XML to stdout, because the
modern launcher parses it to provide a "nicer" console. We don't do
that, so this commit adds embedded versions of the logging configs which
just output log lines normally.
Some newer GraalVM versions appear to be throwing a hard error when the
PermGen flag is specified; this commit changes the behaviour so the flag
is only passed when the Java version is unknown or older than 1.8
Had a report out in the wild of a release file that doesn't end in a
terminating newline, which was causing the parser to blow up.
This commit relaxes the parsing to tolerate EOFs while parsing values.
There were a couple places where I relied on the manifest to have
the default libraries location of "libraries"; this commit fixes those
instances. Without this fix it would be possible for a custom libraries
URL path to leak into the local filesystem, which might've mucked
something up.
If a HTTP request failed to even connect, then the logic determining
whether to retry a partial download would inadvertently throw an error
before it could re-throw the causing error, which resulted in a
confusing error dialog.
An oversight in the implementation of partial download resumption led
to cross-contamination in the presence of multiple request URLs, where
an `Accept-Ranges` header from one server would cause a `Range` header
to be supplied to the next. Compounded with a bad ternary expression
in `HttpRequest` which couldn't handle non-200 success codes, this
was causing cryptic "Stream closed" errors on library downloads.
Previously the launcher was downloading these files once for every
processor due to code architecture limitations. By moving the download
queueing step into BaseUpdater we ensure they are only downloaded once.
It seems that some HTTP servers can silently close the connection before
the file has finished transferring. Since we count the transferred bytes
anyway, throw an exception if we didn't get the number of bytes the
server previously told us to expect.