mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-27 05:10:36 +00:00
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
This commit is contained in:
parent
a4a56f35b8
commit
facd31f44f
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=490604
@ -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
|
||||
|
16
shells/fish/files/patch-src_fallback.cpp
Normal file
16
shells/fish/files/patch-src_fallback.cpp
Normal file
@ -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.
|
19
shells/fish/files/patch-src_fallback.h
Normal file
19
shells/fish/files/patch-src_fallback.h
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user