Fix gjs_context_eval() for non-zero-terminated strings
gjs_context_eval() with a non-zero-terminated string has apparently been broken for quite a long time. I guess nobody ever does that.
This is a surprisingly complicated fix for a simple-sounding problem. The complication is due to the passed-in strlen being ignored in more than one place: both in
gjs_strip_unix_shebang() and in the code that converts UTF-8 to UTF-16.
gjs_strip_unix_shebang() would access invalid memory if given a 1-length string or a non-zero-terminated string.
We fix the UTF-16 conversion code, and replace
gjs_strip_unix_shebang() with a safer version using C++ strings (which we have anyway after converting to UTF-16.) This new function,
gjs_unix_shebang_len(), returns the offset that must be added to the string's starting position, in order to skip the shebang line.
It would be better in the future to return a
gjs_unix_shebang_len(), but that is not yet available in C++14.
This bug was found by compiling with -Wunused-parameter!