aboutsummaryrefslogtreecommitdiff
path: root/shells/fish
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2019-01-17 20:40:43 +0000
committerAlan Somers <asomers@FreeBSD.org>2019-01-17 20:40:43 +0000
commitfacd31f44fbde7cfaa842ec5b5d45bb1fd573641 (patch)
treef353c66adcd4ab32d529abb541f75a1f50fa3a20 /shells/fish
parenta4a56f35b82f1d3b6c64eeff10d4119b5e01bd82 (diff)
downloadports-facd31f44fbde7cfaa842ec5b5d45bb1fd573641.tar.gz
ports-facd31f44fbde7cfaa842ec5b5d45bb1fd573641.zip
shells/fish: patch upstream issue #5453
This change fixes a segfault that would happen from operations like 'printf "%f" 7.0'. Also, this change removes Python as a runtime dependency. That was supposed to have been done in r488840, but there was a typo. https://github.com/fish-shell/fish-shell/issues/5453 Reported by: Mahmoud Al-Qudsi <mqudsi@neosmart.net> MFH: 2019Q1
Notes
Notes: svn path=/head/; revision=490604
Diffstat (limited to 'shells/fish')
-rw-r--r--shells/fish/Makefile3
-rw-r--r--shells/fish/files/patch-src_fallback.cpp16
-rw-r--r--shells/fish/files/patch-src_fallback.h19
3 files changed, 37 insertions, 1 deletions
diff --git a/shells/fish/Makefile b/shells/fish/Makefile
index b89f358b99af..25b7e93bf14c 100644
--- a/shells/fish/Makefile
+++ b/shells/fish/Makefile
@@ -3,6 +3,7 @@
PORTNAME= fish
PORTVERSION= 3.0.0
+PORTREVISION= 1
CATEGORIES= shells
MASTER_SITES= https://github.com/fish-shell/fish-shell/releases/download/${PORTVERSION}/
@@ -15,7 +16,7 @@ LIB_DEPENDS+= libpcre2-32.so:devel/pcre2
# The python dependency is only needed by shebangfix. At runtime python is
# only needed by some optional scripts that aren't in PATH.
-USES= cmake cpe ncurses python:3.4+:build \
+USES= cmake cpe ncurses python:3.4+,build \
localbase compiler:c++11-lang shebangfix
SHEBANG_FILES= share/tools/*.py share/tools/web_config/webconfig.py
diff --git a/shells/fish/files/patch-src_fallback.cpp b/shells/fish/files/patch-src_fallback.cpp
new file mode 100644
index 000000000000..5e0cb1c5f03c
--- /dev/null
+++ b/shells/fish/files/patch-src_fallback.cpp
@@ -0,0 +1,16 @@
+--- src/fallback.cpp
++++ src/fallback.cpp
+@@ -390,9 +390,10 @@ int flock(int fd, int op) {
+ #endif // HAVE_FLOCK
+
+ #ifndef HAVE_WCSTOD_L
+-// musl doesn't feature wcstod_l,
+-// so we just wrap wcstod.
+-double wcstod_l(const wchar_t *enptr, wchar_t **endptr, locale_t loc) {
++#undef wcstod_l
++// For platforms without wcstod_l C extension, wrap wcstod after changing the
++// thread-specific locale.
++double fish_compat::wcstod_l(const wchar_t *enptr, wchar_t **endptr, locale_t loc) {
+ char *saved_locale = strdup(setlocale(LC_NUMERIC, NULL));
+ // Yes, this is hardcoded to use the "C" locale.
+ // That's the only thing we need, and uselocale(loc) broke in my testing.
diff --git a/shells/fish/files/patch-src_fallback.h b/shells/fish/files/patch-src_fallback.h
new file mode 100644
index 000000000000..5854cdbc3f71
--- /dev/null
+++ b/shells/fish/files/patch-src_fallback.h
@@ -0,0 +1,19 @@
+--- src/fallback.h
++++ src/fallback.h
+@@ -200,5 +200,15 @@ int flock(int fd, int op);
+ #endif
+
+ #ifndef HAVE_WCSTOD_L
+-double wcstod_l(const wchar_t *enptr, wchar_t **endptr, locale_t loc);
++// On some platforms if this is incorrectly detected and a system-defined
++// defined version of `wcstod_l` exists, calling `wcstod` from our own
++// `wcstod_l` can call back into `wcstod_l` causing infinite recursion.
++// e.g. FreeBSD defines `wcstod(x, y)` as `wcstod_l(x, y, __get_locale())`.
++// Solution: namespace our implementation to make sure there is no symbol
++// duplication.
++#undef wcstod_l
++namespace fish_compat {
++ double wcstod_l(const wchar_t *enptr, wchar_t **endptr, locale_t loc);
++}
++#define wcstod_l(x, y, z) fish_compat::wcstod_l(x, y, z)
+ #endif