IsConversionSupported unconditionally calls iconv_close on the
descriptor returned by iconv_open. This may result in crashes if
iconv_open returns iconv_invalid.
This became necessary now that more providers were added. Providers can
be proritized for certain file types (e.g. .vpy files will always be
opened with VapourSynth), and when the default provider fails on a file,
the user will be notified and be asked to pick an alternative provider.
The CI builds link against XAudio2_9, which isn't available on Windows 8
and lower. As a quick and dirty workaround, this commit ships the
XAudio2 redistributable on those older Windows versions. Simply renaming
the redistributable to XAudio2_9.dll isn't strictly allowed by the
documentation, but it works and is probably an acceptable hack to
support an outdated operating system...
Fixesarch1t3cht/Aegisub#16 .
Replacing all uses of LuaToAssEntry with LuaToTrackedAssEntry
also replaced its use in LuaParseKaraokeData, which would cause a double
free when canceling a script after calling parse_karaoke_data.
Instead, count how many consecutive times the entry has been found to be
unused and delete it once that count exceeds a limit. This will prevent
excessive reallocating of extradata ID's in applications like folding.
This wasn't necessary before since the internal representation of
folds is be checked for consistency after each commit, but after the
switch to extradata fold operations would leave the extradata in an
invalid state. This isn't technically a problem, but it does leave more
extradata entries lying around than necessary, and it can trip up
automation scripts that aren't prepared for inconsistent fold state.
These commands were revamped in 0ef9963 but the default hotkeys were
never updated. The hotkeys were automatically migrated, but resetting
the settings back to defaults would still set invalid settings.
This would cause an assertion failure in functions like lua_for_each
when the given closure throws an error and thus leaves some values on
the stack. This can make Aegisub crash entirely instead of just catching
and reporting the error. Instead, these stack_checks can be done
manually.