From: Hannu Nyman Date: Mon, 16 Oct 2017 14:34:54 +0000 (+0300) Subject: Merge pull request #4950 from StevenHessing/noddos X-Git-Url: http://git.openwrt.org/?p=feed%2Fpackages.git;a=commitdiff_plain;h=8a0e5c4008113b1e8722b2db4b8a7e82051165cc;hp=330768a409c9625dcf2ecb016bb32aed6e66b17e Merge pull request #4950 from StevenHessing/noddos noddos: noddos v0.5.3 --- diff --git a/libs/glib2/Makefile b/libs/glib2/Makefile index 1e37ee2197..eb86460dd1 100644 --- a/libs/glib2/Makefile +++ b/libs/glib2/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=glib2 -PKG_VERSION:=2.53.7 +PKG_VERSION:=2.54.1 PKG_RELEASE:=1 PKG_SOURCE:=glib-$(PKG_VERSION).tar.xz PKG_BUILD_DIR:=$(BUILD_DIR)/glib-$(PKG_VERSION) -PKG_SOURCE_URL:=@GNOME/glib/2.53 -PKG_HASH:=028efbf6df4d88d7725314456524b923169f4d4f8503347194b2baf2222f3e33 +PKG_SOURCE_URL:=@GNOME/glib/2.54 +PKG_HASH:=50c01b1419324f10fbf9b9709ec2164b18586968bdce7540583bf32302cf47a3 PKG_BUILD_PARALLEL:=1 HOST_BUILD_PARALLEL:=1 diff --git a/multimedia/ffmpeg/Makefile b/multimedia/ffmpeg/Makefile index 058c8ddaad..f260642a88 100644 --- a/multimedia/ffmpeg/Makefile +++ b/multimedia/ffmpeg/Makefile @@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ffmpeg -PKG_VERSION:=3.2.7 -PKG_RELEASE:=3 +PKG_VERSION:=3.2.8 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://ffmpeg.org/releases/ -PKG_HASH:=28e75fc32485a88035a7ebf0a956a1e5c7e93b440dd4bbd6bc30c7268cf34fe9 +PKG_HASH:=42e7362692318afc666f14378dd445effa9a1b09787504a6ab5811fe442674cd PKG_MAINTAINER:=Ted Hess , \ Ian Leonard @@ -420,7 +420,6 @@ ifneq ($(findstring arm,$(CONFIG_ARCH)),) else FFMPEG_CONFIGURE+= --disable-neon endif - endif ifeq ($(ARCH),x86_64) @@ -550,8 +549,7 @@ ifeq ($(BUILD_VARIANT),audio-dec) $(call FFMPEG_ENABLE,decoder,$(FFMPEG_AUDIO_DECODERS)) \ $(call FFMPEG_ENABLE,demuxer,$(FFMPEG_AUDIO_DEMUXERS)) \ $(call FFMPEG_ENABLE,protocol,$(FFMPEG_AUDIO_PROTOCOLS)) \ - --disable-decoder=pcm_bluray,pcm_dvd \ - + --disable-decoder=pcm_bluray,pcm_dvd endif ifeq ($(BUILD_VARIANT),mini) diff --git a/multimedia/minidlna/Makefile b/multimedia/minidlna/Makefile index e2c79e8458..9243919327 100644 --- a/multimedia/minidlna/Makefile +++ b/multimedia/minidlna/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=minidlna -PKG_VERSION:=1.2.0 +PKG_VERSION:=1.2.1 PKG_RELEASE:=1 PKG_SOURCE_URL:=@SF/minidlna PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_HASH:=8d34436580c4c44be25976d5e46bc5b71af69bf441c4492774eac001164c4433 +PKG_HASH:=67388ba23ab0c7033557a32084804f796aa2a796db7bb2b770fb76ac2a742eec PKG_LICENSE:=GPL-2.0 BSD-3-Clause PKG_LICENSE_FILES:=COPYING LICENCE.miniupnpd diff --git a/net/apache/Config.in b/net/apache/Config.in new file mode 100644 index 0000000000..5eb42b30a6 --- /dev/null +++ b/net/apache/Config.in @@ -0,0 +1,11 @@ +menu "Configuration" + depends on PACKAGE_apache + +config APACHE_HTTP2 + bool + prompt "Enable HTTP2" + help + Enable HTTPS2 support. + default n + +endmenu diff --git a/net/apache/Makefile b/net/apache/Makefile index 098e2befbf..6763c4a0e9 100644 --- a/net/apache/Makefile +++ b/net/apache/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=apache -PKG_VERSION:=2.4.27 +PKG_VERSION:=2.4.28 PKG_RELEASE:=1 PKG_SOURCE_NAME:=httpd PKG_MAINTAINER:=Thomas Heil @@ -16,12 +16,23 @@ PKG_LICENSE:=Apache License PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=@APACHE/httpd/ -PKG_HASH:=71fcc128238a690515bd8174d5330a5309161ef314a326ae45c7c15ed139c13a +PKG_HASH:=c1197a3a62a4ab5c584ab89b249af38cf28b4adee9c0106b62999fd29f920666 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_NAME)-$(PKG_VERSION) PKG_INSTALL:=1 +PKG_CONFIG_DEPENDS := \ + CONFIG_APACHE_HTTP2 + +ADDITIONAL_MODULES:= +ifeq ($(CONFIG_APACHE_HTTP2),y) + ADDITIONAL_MODULES += --enable-http2 +endif +ifneq ($(CONFIG_APACHE_HTTP2),y) + ADDITIONAL_MODULES += --enable-http2=no +endif + include $(INCLUDE_DIR)/package.mk define Package/apache/Default @@ -38,9 +49,13 @@ define Package/apache/Default/description Server, it has grown to be the most popular web server on the Internet. endef +define Package/apache/config + source "$(SOURCE)/Config.in" +endef + define Package/apache $(call Package/apache/Default) - DEPENDS:=+libapr +libaprutil +libpcre +libopenssl +unixodbc +zlib + DEPENDS:=+libapr +libaprutil +libpcre +libopenssl +unixodbc +zlib +APACHE_HTTP2:libnghttp2 endef define Package/apache/description @@ -90,13 +105,14 @@ endef TARGET_CFLAGS += $(FPIC) TARGET_CPPFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -TARGET_LDFLAGS += -lpthread +TARGET_LDFLAGS += -lpthread define Build/Configure $(call Build/Configure/Default, \ --with-apr="$(STAGING_DIR)/usr/bin/apr-1-config" \ --with-apr-util="$(STAGING_DIR)/usr/bin/apu-1-config" \ --with-pcre="$(STAGING_DIR)/usr/bin/pcre-config" \ + $(ADDITIONAL_MODULES) \ --enable-http \ --with-crypto \ --with-sqlit3="$(STAGING_DIR)/usr" \ diff --git a/net/freeradius3/Makefile b/net/freeradius3/Makefile index 48c083536f..20d1dc5e2e 100644 --- a/net/freeradius3/Makefile +++ b/net/freeradius3/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=freeradius3 PKG_VERSION:=release_3_0_11 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE:=$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/FreeRADIUS/freeradius-server/archive diff --git a/net/freeradius3/patches/001-fix-cert-expiry.patch b/net/freeradius3/patches/001-fix-cert-expiry.patch index b30b01279a..578bbbc0eb 100644 --- a/net/freeradius3/patches/001-fix-cert-expiry.patch +++ b/net/freeradius3/patches/001-fix-cert-expiry.patch @@ -22,7 +22,7 @@ preserve = no --- a/raddb/certs/server.cnf +++ b/raddb/certs/server.cnf -@@ -14,7 +14,7 @@ private_key = $dir/ca.key +@@ -14,7 +14,7 @@ private_key = $dir/server.key RANDFILE = $dir/.rand name_opt = ca_default cert_opt = ca_default diff --git a/net/freeradius3/patches/002-disable-session-cache-CVE-2017-9148.patch b/net/freeradius3/patches/002-disable-session-cache-CVE-2017-9148.patch new file mode 100644 index 0000000000..458eeba212 --- /dev/null +++ b/net/freeradius3/patches/002-disable-session-cache-CVE-2017-9148.patch @@ -0,0 +1,47 @@ +Description: disable session caching in the server (as opposed to in the + config, which would be way harder to get right) to address + https://security-tracker.debian.org/tracker/CVE-2017-9148 +Author: Michael Stapelberg +Forwarded: not-needed +Last-Update: 2017-05-30 + +--- + +--- a/src/main/tls.c ++++ b/src/main/tls.c +@@ -369,7 +369,7 @@ tls_session_t *tls_new_session(TALLOC_CT + * + * FIXME: Also do it every N sessions? + */ +- if (conf->session_cache_enable && ++ if (/*conf->session_cache_enable*/0 && + ((conf->session_last_flushed + ((int)conf->session_timeout * 1800)) <= request->timestamp)){ + RDEBUG2("Flushing SSL sessions (of #%ld)", SSL_CTX_sess_number(conf->ctx)); + +@@ -463,7 +463,7 @@ tls_session_t *tls_new_session(TALLOC_CT + state->mtu = vp->vp_integer; + } + +- if (conf->session_cache_enable) state->allow_session_resumption = true; /* otherwise it's false */ ++ if (/*conf->session_cache_enable*/0) state->allow_session_resumption = true; /* otherwise it's false */ + + return state; + } +@@ -2675,7 +2675,7 @@ post_ca: + /* + * Callbacks, etc. for session resumption. + */ +- if (conf->session_cache_enable) { ++ if (/*conf->session_cache_enable*/0) { + /* + * Cache sessions on disk if requested. + */ +@@ -2745,7 +2745,7 @@ post_ca: + /* + * Setup session caching + */ +- if (conf->session_cache_enable) { ++ if (/*conf->session_cache_enable*/0) { + /* + * Create a unique context Id per EAP-TLS configuration. + */ diff --git a/net/haproxy/Makefile b/net/haproxy/Makefile index 74334cc5da..9618fdc3ce 100644 --- a/net/haproxy/Makefile +++ b/net/haproxy/Makefile @@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=haproxy -PKG_VERSION:=1.7.8 -PKG_RELEASE:=18 +PKG_VERSION:=1.7.9 +PKG_RELEASE:=02 PKG_SOURCE:=haproxy-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://www.haproxy.org/download/1.7/src/ -PKG_HASH:=ec90153ccedd20ad4015d3eaf76b502ff1f61b431d54c22b8457b5784a9ae142 +PKG_HASH:=1072337e54fa188dc6e0cfe3ba4c2200b07082e321cbfe5a0882d85d54db068e PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) PKG_LICENSE:=GPL-2.0 @@ -30,16 +30,18 @@ define Package/haproxy/Default URL:=http://haproxy.1wt.eu/ endef -define Download/lua533 - FILE:=lua-5.3.3.tar.gz +define Download/lua534 + FILE:=lua-5.3.4.tar.gz URL:=http://www.lua.org/ftp/ - HASH:=5113c06884f7de453ce57702abaac1d618307f33f6789fa870e87a59d772aca2 + HASH:=f681aa518233bc407e23acf0f5887c884f17436f000d453b2491a9f11a52400c endef define Build/Prepare $(call Build/Prepare/Default) - tar -zxvf $(DL_DIR)/lua-5.3.3.tar.gz -C $(PKG_BUILD_DIR) - ln -s $(PKG_BUILD_DIR)/lua-5.3.3 $(PKG_BUILD_DIR)/lua +ifeq ($(ENABLE_LUA),y) + tar -zxvf $(DL_DIR)/lua-5.3.4.tar.gz -C $(PKG_BUILD_DIR) + ln -s $(PKG_BUILD_DIR)/lua-5.3.4 $(PKG_BUILD_DIR)/lua +endif endef define Package/haproxy/Default/conffiles @@ -89,6 +91,11 @@ $(call Package/haproxy/Default/description) This package is built without SSL support. endef +ENABLE_LUA:=y +ifeq ($(CONFIG_mips),y) + ENABLE_LUA:=n +endif + ifeq ($(CONFIG_avr32),y) LINUX_TARGET:=linux26 else @@ -97,27 +104,32 @@ endif ifeq ($(BUILD_VARIANT),ssl) ADDON+=USE_OPENSSL=1 + ADDON+=ADDLIB="-lcrypto -lm " +else ifeq ($(CONFIG_mips),n) ADDON+=USE_LUA=1 - ADDON+=LUA_LIB_NAME="lua533" - ADDON+=LUA_INC="$(STAGING_DIR)/lua-5.3.3/include" - ADDON+=LUA_LIB="$(STAGING_DIR)/lua-5.3.3/lib" - ADDON+=ADDLIB="-lcrypto -lm " + ADDON+=LUA_LIB_NAME="lua534" + ADDON+=LUA_INC="$(STAGING_DIR)/lua-5.3.4/include" + ADDON+=LUA_LIB="$(STAGING_DIR)/lua-5.3.4/lib" else ADDON+=ADDLIB="-lm" endif - -define Build/Compile +ifeq ($(ENABLE_LUA),y) +define Build/Compile/lua $(MAKE) TARGET=$(LINUX_TARGET) -C $(PKG_BUILD_DIR)/lua \ - INSTALL_TOP="$(STAGING_DIR)/lua-5.3.3/" \ + INSTALL_TOP="$(STAGING_DIR)/lua-5.3.4/" \ CC="$(TARGET_CC)" \ CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS) -lncurses -lreadline" \ LD="$(TARGET_LD)" \ linux install - mv $(STAGING_DIR)/lua-5.3.3/lib/liblua.a $(STAGING_DIR)/lua-5.3.3/lib/liblua533.a + mv $(STAGING_DIR)/lua-5.3.4/lib/liblua.a $(STAGING_DIR)/lua-5.3.4/lib/liblua534.a +endef +endif +define Build/Compile + $(call Build/Compile/lua) $(MAKE) TARGET=$(LINUX_TARGET) -C $(PKG_BUILD_DIR) \ DESTDIR="$(PKG_INSTALL_DIR)" \ CC="$(TARGET_CC)" \ @@ -160,7 +172,6 @@ endef Package/haproxy-nossl/install = $(Package/haproxy/install) - define Package/halog MENU:=1 $(call Package/haproxy) @@ -177,8 +188,7 @@ define Package/halog/install $(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/halog/halog $(1)/usr/bin/ endef -$(eval $(call Download,lua533)) +$(eval $(call Download,lua534)) $(eval $(call BuildPackage,haproxy)) $(eval $(call BuildPackage,halog)) $(eval $(call BuildPackage,haproxy-nossl)) - diff --git a/net/haproxy/patches/0001-BUG-MEDIUM-connection-remove-useless-flag-CO_FL_DATA.patch b/net/haproxy/patches/0001-BUG-MEDIUM-connection-remove-useless-flag-CO_FL_DATA.patch new file mode 100644 index 0000000000..dcbef615ed --- /dev/null +++ b/net/haproxy/patches/0001-BUG-MEDIUM-connection-remove-useless-flag-CO_FL_DATA.patch @@ -0,0 +1,158 @@ +From 912e8f18ef274fdda0a522b2aa8255bddd00fb7b Mon Sep 17 00:00:00 2001 +From: Willy Tarreau +Date: Wed, 30 Aug 2017 07:35:35 +0200 +Subject: [PATCH] BUG/MEDIUM: connection: remove useless flag CO_FL_DATA_RD_SH + +This flag is both confusing and wrong. It is supposed to report the +fact that the data layer has received a shutdown, but in fact this is +reported by CO_FL_SOCK_RD_SH which is set by the transport layer after +this condition is detected. The only case where the flag above is set +is in the stream interface where CF_SHUTR is also set on the receiving +channel. + +In addition, it was checked in the health checks code (while never set) +and was always test jointly with CO_FL_SOCK_RD_SH everywhere, except in +conn_data_read0_pending() which incorrectly doesn't match the second +time it's called and is fortunately protected by an extra check on +(ic->flags & CF_SHUTR). + +This patch gets rid of the flag completely. Now conn_data_read0_pending() +accurately reports the fact that the transport layer has detected the end +of the stream, regardless of the fact that this state was already consumed, +and the stream interface watches ic->flags&CF_SHUTR to know if the channel +was already closed by the upper layer (which it already used to do). + +The now unused conn_data_read0() function was removed. +(cherry picked from commit 54e917cfa1e7b0539550ae32c48c76da2f169041) + +[wt: this happens to fix a real bug which occasionally strikes when + using http-reuse in the rare case where a server shuts down after + providing its response but before the connection is put back into + the idle pool, and it gets immediately recycled for another request, + without first passing through the idle handler, and the already + reported shutdown is never reported to the second transaction, + causing a loop to last for as long as the server timeout] +--- + contrib/debug/flags.c | 1 - + include/proto/connection.h | 8 +------- + include/types/connection.h | 2 +- + src/checks.c | 4 ++-- + src/stream_interface.c | 11 +++++------ + 5 files changed, 9 insertions(+), 17 deletions(-) + +diff --git a/contrib/debug/flags.c b/contrib/debug/flags.c +index bc71bde9..19327f34 100644 +--- a/contrib/debug/flags.c ++++ b/contrib/debug/flags.c +@@ -117,7 +117,6 @@ void show_conn_flags(unsigned int f) + SHOW_FLAG(f, CO_FL_SOCK_WR_SH); + SHOW_FLAG(f, CO_FL_SOCK_RD_SH); + SHOW_FLAG(f, CO_FL_DATA_WR_SH); +- SHOW_FLAG(f, CO_FL_DATA_RD_SH); + SHOW_FLAG(f, CO_FL_WAKE_DATA); + SHOW_FLAG(f, CO_FL_INIT_DATA); + SHOW_FLAG(f, CO_FL_ADDR_TO_SET); +diff --git a/include/proto/connection.h b/include/proto/connection.h +index fce60259..eb68322a 100644 +--- a/include/proto/connection.h ++++ b/include/proto/connection.h +@@ -413,12 +413,6 @@ static inline void conn_sock_read0(struct connection *c) + fdtab[c->t.sock.fd].linger_risk = 0; + } + +-static inline void conn_data_read0(struct connection *c) +-{ +- c->flags |= CO_FL_DATA_RD_SH; +- __conn_data_stop_recv(c); +-} +- + static inline void conn_sock_shutw(struct connection *c) + { + c->flags |= CO_FL_SOCK_WR_SH; +@@ -450,7 +444,7 @@ static inline void conn_data_shutw_hard(struct connection *c) + /* detect sock->data read0 transition */ + static inline int conn_data_read0_pending(struct connection *c) + { +- return (c->flags & (CO_FL_DATA_RD_SH | CO_FL_SOCK_RD_SH)) == CO_FL_SOCK_RD_SH; ++ return (c->flags & CO_FL_SOCK_RD_SH) != 0; + } + + /* detect data->sock shutw transition */ +diff --git a/include/types/connection.h b/include/types/connection.h +index 02eac932..90e8e073 100644 +--- a/include/types/connection.h ++++ b/include/types/connection.h +@@ -90,7 +90,7 @@ enum { + CO_FL_WAKE_DATA = 0x00008000, /* wake-up data layer upon activity at the transport layer */ + + /* flags used to remember what shutdown have been performed/reported */ +- CO_FL_DATA_RD_SH = 0x00010000, /* DATA layer was notified about shutr/read0 */ ++ /* unused : 0x00010000 */ + CO_FL_DATA_WR_SH = 0x00020000, /* DATA layer asked for shutw */ + CO_FL_SOCK_RD_SH = 0x00040000, /* SOCK layer was notified about shutr/read0 */ + CO_FL_SOCK_WR_SH = 0x00080000, /* SOCK layer asked for shutw */ +diff --git a/src/checks.c b/src/checks.c +index ca3881a5..6c5e3cbc 100644 +--- a/src/checks.c ++++ b/src/checks.c +@@ -839,7 +839,7 @@ static void event_srv_chk_r(struct connection *conn) + done = 0; + + conn->xprt->rcv_buf(conn, check->bi, check->bi->size); +- if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_DATA_RD_SH)) { ++ if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH)) { + done = 1; + if ((conn->flags & CO_FL_ERROR) && !check->bi->i) { + /* Report network errors only if we got no other data. Otherwise +@@ -2892,7 +2892,7 @@ static void tcpcheck_main(struct connection *conn) + goto out_end_tcpcheck; + + if (conn->xprt->rcv_buf(conn, check->bi, check->bi->size) <= 0) { +- if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_DATA_RD_SH)) { ++ if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH)) { + done = 1; + if ((conn->flags & CO_FL_ERROR) && !check->bi->i) { + /* Report network errors only if we got no other data. Otherwise +diff --git a/src/stream_interface.c b/src/stream_interface.c +index 836487bd..aba49c94 100644 +--- a/src/stream_interface.c ++++ b/src/stream_interface.c +@@ -1060,14 +1060,14 @@ static void si_conn_recv_cb(struct connection *conn) + if (conn->flags & CO_FL_ERROR) + return; + +- /* stop here if we reached the end of data */ +- if (conn_data_read0_pending(conn)) +- goto out_shutdown_r; +- + /* maybe we were called immediately after an asynchronous shutr */ + if (ic->flags & CF_SHUTR) + return; + ++ /* stop here if we reached the end of data */ ++ if (conn_data_read0_pending(conn)) ++ goto out_shutdown_r; ++ + cur_read = 0; + + if ((ic->flags & (CF_STREAMER | CF_STREAMER_FAST)) && !ic->buf->o && +@@ -1153,7 +1153,7 @@ static void si_conn_recv_cb(struct connection *conn) + * that if such an event is not handled above in splice, it will be handled here by + * recv(). + */ +- while (!(conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_DATA_RD_SH | CO_FL_WAIT_ROOM | CO_FL_HANDSHAKE))) { ++ while (!(conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_WAIT_ROOM | CO_FL_HANDSHAKE)) && !(ic->flags & CF_SHUTR)) { + max = channel_recv_max(ic); + + if (!max) { +@@ -1267,7 +1267,6 @@ static void si_conn_recv_cb(struct connection *conn) + if (ic->flags & CF_AUTO_CLOSE) + channel_shutw_now(ic); + stream_sock_read0(si); +- conn_data_read0(conn); + return; + } + +-- +2.13.5 + diff --git a/net/haproxy/patches/0001-BUG-MINOR-peers-peer-synchronization-issue-with-seve.patch b/net/haproxy/patches/0001-BUG-MINOR-peers-peer-synchronization-issue-with-seve.patch deleted file mode 100644 index a24c96709b..0000000000 --- a/net/haproxy/patches/0001-BUG-MINOR-peers-peer-synchronization-issue-with-seve.patch +++ /dev/null @@ -1,299 +0,0 @@ -From fa73e6b0d5f64eb8a6fd8a1706d7ec03293a943e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= -Date: Thu, 13 Jul 2017 09:07:09 +0200 -Subject: [PATCH 01/18] BUG/MINOR: peers: peer synchronization issue (with - several peers sections). - -When several stick-tables were configured with several peers sections, -only a part of them could be synchronized: the ones attached to the last -parsed 'peers' section. This was due to the fact that, at least, the peer I/O handler -refered to the wrong peer section list, in fact always the same: the last one parsed. - -The fact that the global peer section list was named "struct peers *peers" -lead to this issue. This variable name is dangerous ;). - -So this patch renames global 'peers' variable to 'cfg_peers' to ensure that -no such wrong references are still in use, then all the functions wich used -old 'peers' variable have been modified to refer to the correct peer list. - -Must be backported to 1.6 and 1.7. -(cherry picked from commit ed2b4a6b793d062000518e51ed71e014c649c313) - -Signed-off-by: Willy Tarreau ---- - include/types/peers.h | 2 +- - src/cfgparse.c | 18 +++++++++--------- - src/haproxy.c | 10 +++++----- - src/peers.c | 40 ++++++++++++++++++++-------------------- - src/proxy.c | 6 +++--- - 5 files changed, 38 insertions(+), 38 deletions(-) - -diff --git a/include/types/peers.h b/include/types/peers.h -index 105dffb0..a77a0942 100644 ---- a/include/types/peers.h -+++ b/include/types/peers.h -@@ -91,7 +91,7 @@ struct peers { - }; - - --extern struct peers *peers; -+extern struct peers *cfg_peers; - - #endif /* _TYPES_PEERS_H */ - -diff --git a/src/cfgparse.c b/src/cfgparse.c -index 8c0906bf..1b53006b 100644 ---- a/src/cfgparse.c -+++ b/src/cfgparse.c -@@ -2124,7 +2124,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) - goto out; - } - -- for (curpeers = peers; curpeers != NULL; curpeers = curpeers->next) { -+ for (curpeers = cfg_peers; curpeers != NULL; curpeers = curpeers->next) { - /* - * If there are two proxies with the same name only following - * combinations are allowed: -@@ -2142,8 +2142,8 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) - goto out; - } - -- curpeers->next = peers; -- peers = curpeers; -+ curpeers->next = cfg_peers; -+ cfg_peers = curpeers; - curpeers->conf.file = strdup(file); - curpeers->conf.line = linenum; - curpeers->last_change = now.tv_sec; -@@ -2223,7 +2223,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) - if (strcmp(newpeer->id, localpeer) == 0) { - /* Current is local peer, it define a frontend */ - newpeer->local = 1; -- peers->local = newpeer; -+ cfg_peers->local = newpeer; - - if (!curpeers->peers_fe) { - if ((curpeers->peers_fe = calloc(1, sizeof(struct proxy))) == NULL) { -@@ -8189,9 +8189,9 @@ int check_config_validity() - } - - if (curproxy->table.peers.name) { -- struct peers *curpeers = peers; -+ struct peers *curpeers; - -- for (curpeers = peers; curpeers; curpeers = curpeers->next) { -+ for (curpeers = cfg_peers; curpeers; curpeers = curpeers->next) { - if (strcmp(curpeers->id, curproxy->table.peers.name) == 0) { - free((void *)curproxy->table.peers.name); - curproxy->table.peers.p = curpeers; -@@ -9279,15 +9279,15 @@ out_uri_auth_compat: - if (curproxy->table.peers.p) - curproxy->table.peers.p->peers_fe->bind_proc |= curproxy->bind_proc; - -- if (peers) { -- struct peers *curpeers = peers, **last; -+ if (cfg_peers) { -+ struct peers *curpeers = cfg_peers, **last; - struct peer *p, *pb; - - /* Remove all peers sections which don't have a valid listener, - * which are not used by any table, or which are bound to more - * than one process. - */ -- last = &peers; -+ last = &cfg_peers; - while (*last) { - curpeers = *last; - -diff --git a/src/haproxy.c b/src/haproxy.c -index 6d09aed4..25cea0cd 100644 ---- a/src/haproxy.c -+++ b/src/haproxy.c -@@ -988,7 +988,7 @@ void init(int argc, char **argv) - struct peers *pr; - struct proxy *px; - -- for (pr = peers; pr; pr = pr->next) -+ for (pr = cfg_peers; pr; pr = pr->next) - if (pr->peers_fe) - break; - -@@ -1217,11 +1217,11 @@ void init(int argc, char **argv) - if (global.stats_fe) - global.maxsock += global.stats_fe->maxconn; - -- if (peers) { -+ if (cfg_peers) { - /* peers also need to bypass global maxconn */ -- struct peers *p = peers; -+ struct peers *p = cfg_peers; - -- for (p = peers; p; p = p->next) -+ for (p = cfg_peers; p; p = p->next) - if (p->peers_fe) - global.maxsock += p->peers_fe->maxconn; - } -@@ -2067,7 +2067,7 @@ int main(int argc, char **argv) - } - - /* we might have to unbind some peers sections from some processes */ -- for (curpeers = peers; curpeers; curpeers = curpeers->next) { -+ for (curpeers = cfg_peers; curpeers; curpeers = curpeers->next) { - if (!curpeers->peers_fe) - continue; - -diff --git a/src/peers.c b/src/peers.c -index 543c84c1..5b8a287a 100644 ---- a/src/peers.c -+++ b/src/peers.c -@@ -171,7 +171,7 @@ enum { - #define PEER_MINOR_VER 1 - #define PEER_DWNGRD_MINOR_VER 0 - --struct peers *peers = NULL; -+struct peers *cfg_peers = NULL; - static void peer_session_forceshutdown(struct appctx *appctx); - - /* This function encode an uint64 to 'dynamic' length format. -@@ -727,19 +727,19 @@ switchstate: - /* if current peer is local */ - if (curpeer->local) { - /* if current host need resyncfrom local and no process assined */ -- if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMLOCAL && -- !(peers->flags & PEERS_F_RESYNC_ASSIGN)) { -+ if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMLOCAL && -+ !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) { - /* assign local peer for a lesson, consider lesson already requested */ - curpeer->flags |= PEER_F_LEARN_ASSIGN; -- peers->flags |= (PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS); -+ curpeers->flags |= (PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS); - } - - } -- else if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE && -- !(peers->flags & PEERS_F_RESYNC_ASSIGN)) { -+ else if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE && -+ !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) { - /* assign peer for a lesson */ - curpeer->flags |= PEER_F_LEARN_ASSIGN; -- peers->flags |= PEERS_F_RESYNC_ASSIGN; -+ curpeers->flags |= PEERS_F_RESYNC_ASSIGN; - } - - -@@ -807,7 +807,7 @@ switchstate: - curpeer->statuscode = atoi(trash.str); - - /* Awake main task */ -- task_wakeup(peers->sync_task, TASK_WOKEN_MSG); -+ task_wakeup(curpeers->sync_task, TASK_WOKEN_MSG); - - /* If status code is success */ - if (curpeer->statuscode == PEER_SESS_SC_SUCCESSCODE) { -@@ -830,14 +830,14 @@ switchstate: - curpeer->flags |= PEER_F_TEACH_PROCESS; - - } -- else if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE && -- !(peers->flags & PEERS_F_RESYNC_ASSIGN)) { -+ else if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE && -+ !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) { - /* If peer is remote and resync from remote is needed, - and no peer currently assigned */ - - /* assign peer for a lesson */ - curpeer->flags |= PEER_F_LEARN_ASSIGN; -- peers->flags |= PEERS_F_RESYNC_ASSIGN; -+ curpeers->flags |= PEERS_F_RESYNC_ASSIGN; - } - - } -@@ -950,8 +950,8 @@ switchstate: - - if (curpeer->flags & PEER_F_LEARN_ASSIGN) { - curpeer->flags &= ~PEER_F_LEARN_ASSIGN; -- peers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS); -- peers->flags |= (PEERS_F_RESYNC_LOCAL|PEERS_F_RESYNC_REMOTE); -+ curpeers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS); -+ curpeers->flags |= (PEERS_F_RESYNC_LOCAL|PEERS_F_RESYNC_REMOTE); - } - curpeer->confirm++; - } -@@ -959,11 +959,11 @@ switchstate: - - if (curpeer->flags & PEER_F_LEARN_ASSIGN) { - curpeer->flags &= ~PEER_F_LEARN_ASSIGN; -- peers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS); -+ curpeers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS); - - curpeer->flags |= PEER_F_LEARN_NOTUP2DATE; -- peers->resync_timeout = tick_add(now_ms, MS_TO_TICKS(5000)); -- task_wakeup(peers->sync_task, TASK_WOKEN_MSG); -+ curpeers->resync_timeout = tick_add(now_ms, MS_TO_TICKS(5000)); -+ task_wakeup(curpeers->sync_task, TASK_WOKEN_MSG); - } - curpeer->confirm++; - } -@@ -1334,8 +1334,8 @@ incomplete: - - /* Need to request a resync */ - if ((curpeer->flags & PEER_F_LEARN_ASSIGN) && -- (peers->flags & PEERS_F_RESYNC_ASSIGN) && -- !(peers->flags & PEERS_F_RESYNC_PROCESS)) { -+ (curpeers->flags & PEERS_F_RESYNC_ASSIGN) && -+ !(curpeers->flags & PEERS_F_RESYNC_PROCESS)) { - unsigned char msg[2]; - - /* Current peer was elected to request a resync */ -@@ -1351,7 +1351,7 @@ incomplete: - appctx->st0 = PEER_SESS_ST_END; - goto switchstate; - } -- peers->flags |= PEERS_F_RESYNC_PROCESS; -+ curpeers->flags |= PEERS_F_RESYNC_PROCESS; - } - - /* Nothing to read, now we start to write */ -@@ -1624,7 +1624,7 @@ incomplete: - - /* Current peer was elected to request a resync */ - msg[0] = PEER_MSG_CLASS_CONTROL; -- msg[1] = ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FINISHED) ? PEER_MSG_CTRL_RESYNCFINISHED : PEER_MSG_CTRL_RESYNCPARTIAL; -+ msg[1] = ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FINISHED) ? PEER_MSG_CTRL_RESYNCFINISHED : PEER_MSG_CTRL_RESYNCPARTIAL; - /* process final lesson message */ - repl = bi_putblk(si_ic(si), (char *)msg, sizeof(msg)); - if (repl <= 0) { -diff --git a/src/proxy.c b/src/proxy.c -index 78120d9b..bedc7ae0 100644 ---- a/src/proxy.c -+++ b/src/proxy.c -@@ -1007,7 +1007,7 @@ void soft_stop(void) - p = p->next; - } - -- prs = peers; -+ prs = cfg_peers; - while (prs) { - if (prs->peers_fe) - stop_proxy(prs->peers_fe); -@@ -1142,7 +1142,7 @@ void pause_proxies(void) - p = p->next; - } - -- prs = peers; -+ prs = cfg_peers; - while (prs) { - if (prs->peers_fe) - err |= !pause_proxy(prs->peers_fe); -@@ -1176,7 +1176,7 @@ void resume_proxies(void) - p = p->next; - } - -- prs = peers; -+ prs = cfg_peers; - while (prs) { - if (prs->peers_fe) - err |= !resume_proxy(prs->peers_fe); --- -2.13.0 - diff --git a/net/haproxy/patches/0002-BUG-MINOR-lua-In-error-case-the-safe-mode-is-not-rem.patch b/net/haproxy/patches/0002-BUG-MINOR-lua-In-error-case-the-safe-mode-is-not-rem.patch deleted file mode 100644 index ea4651d2c3..0000000000 --- a/net/haproxy/patches/0002-BUG-MINOR-lua-In-error-case-the-safe-mode-is-not-rem.patch +++ /dev/null @@ -1,36 +0,0 @@ -From bcc483a9edfeb8ab69d1af83886d9e1323cffd06 Mon Sep 17 00:00:00 2001 -From: Thierry FOURNIER -Date: Wed, 12 Jul 2017 11:18:00 +0200 -Subject: [PATCH 02/18] BUG/MINOR: lua: In error case, the safe mode is not - removed - -Just forgot of reset the safe mode. This have not consequences -the safe mode just set a pointer on fucntion which is called only -and initialises a longjmp. - -Out of lua execution, this longjmp is never executed and the -function is never called. - -This patch should be backported in 1.6 and 1.7 -(cherry picked from commit 0a97620c080232a21ad7fce2c859a2edc9d7147e) - -Signed-off-by: Willy Tarreau ---- - src/hlua.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/hlua.c b/src/hlua.c -index c862102d..4c1c2d21 100644 ---- a/src/hlua.c -+++ b/src/hlua.c -@@ -854,6 +854,7 @@ int hlua_ctx_init(struct hlua *lua, struct task *task) - lua->T = lua_newthread(gL.T); - if (!lua->T) { - lua->Tref = LUA_REFNIL; -+ RESET_SAFE_LJMP(gL.T); - return 0; - } - hlua_sethlua(lua); --- -2.13.0 - diff --git a/net/haproxy/patches/0003-BUG-MINOR-lua-executes-the-function-destroying-the-L.patch b/net/haproxy/patches/0003-BUG-MINOR-lua-executes-the-function-destroying-the-L.patch deleted file mode 100644 index 2b200ee0a0..0000000000 --- a/net/haproxy/patches/0003-BUG-MINOR-lua-executes-the-function-destroying-the-L.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 49d319a677432b69c6a69ef5331ae2ed592075c9 Mon Sep 17 00:00:00 2001 -From: Thierry FOURNIER -Date: Wed, 12 Jul 2017 13:41:33 +0200 -Subject: [PATCH 03/18] BUG/MINOR: lua: executes the function destroying the - Lua session in safe mode - -When we destroy the Lua session, we manipulates Lua stack, -so errors can raises. It will be better to catch these errors. - -This patch should be backported in 1.6 and 1.7 -(cherry picked from commit 75d0208009c3189b5d10793e08f27dd62a76c3ae) - -Signed-off-by: Willy Tarreau ---- - src/hlua.c | 17 +++++++++++++++-- - 1 file changed, 15 insertions(+), 2 deletions(-) - -diff --git a/src/hlua.c b/src/hlua.c -index 4c1c2d21..2d312804 100644 ---- a/src/hlua.c -+++ b/src/hlua.c -@@ -876,9 +876,15 @@ void hlua_ctx_destroy(struct hlua *lua) - /* Purge all the pending signals. */ - hlua_com_purge(lua); - -+ if (!SET_SAFE_LJMP(lua->T)) -+ return; - luaL_unref(lua->T, LUA_REGISTRYINDEX, lua->Mref); -- luaL_unref(gL.T, LUA_REGISTRYINDEX, lua->Tref); -+ RESET_SAFE_LJMP(lua->T); - -+ if (!SET_SAFE_LJMP(gL.T)) -+ return; -+ luaL_unref(gL.T, LUA_REGISTRYINDEX, lua->Tref); -+ RESET_SAFE_LJMP(gL.T); - /* Forces a garbage collecting process. If the Lua program is finished - * without error, we run the GC on the thread pointer. Its freed all - * the unused memory. -@@ -889,9 +895,16 @@ void hlua_ctx_destroy(struct hlua *lua) - * the garbage collection. - */ - if (lua->flags & HLUA_MUST_GC) { -+ if (!SET_SAFE_LJMP(lua->T)) -+ return; - lua_gc(lua->T, LUA_GCCOLLECT, 0); -- if (lua_status(lua->T) != LUA_OK) -+ RESET_SAFE_LJMP(lua->T); -+ if (lua_status(lua->T) != LUA_OK) { -+ if (!SET_SAFE_LJMP(gL.T)) -+ return; - lua_gc(gL.T, LUA_GCCOLLECT, 0); -+ RESET_SAFE_LJMP(gL.T); -+ } - } - - lua->T = NULL; --- -2.13.0 - diff --git a/net/haproxy/patches/0004-BUG-MAJOR-lua-socket-resources-not-detroyed-when-the.patch b/net/haproxy/patches/0004-BUG-MAJOR-lua-socket-resources-not-detroyed-when-the.patch deleted file mode 100644 index ced02f5913..0000000000 --- a/net/haproxy/patches/0004-BUG-MAJOR-lua-socket-resources-not-detroyed-when-the.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 2823f54f706f56304970313cb14a98a4ce20d5ab Mon Sep 17 00:00:00 2001 -From: Thierry FOURNIER -Date: Sun, 16 Jul 2017 20:48:54 +0200 -Subject: [PATCH 04/18] BUG/MAJOR: lua/socket: resources not detroyed when the - socket is aborted - -In some cases, the socket is misused. The user can open socket and never -close it, or open the socket and close it without sending data. This -causes resources leak on all resources associated to the stream (buffer, -spoe, ...) - -This is caused by the stream_shutdown function which is called outside -of the stream execution process. Sometimes, the shtudown is required -while the stream is not started, so the cleanup is ignored. - -This patch change the shutdown mode of the session. Now if the session is -no longer used and the Lua want to destroy it, it just set a destroy flag -and the session kill itself. - -This patch should be backported in 1.6 and 1.7 - -(cherry picked from cmomit b13b20a19aacb039a33f886e38a181b00c9a6d41) - -Signed-off-by: Willy Tarreau ---- - include/types/applet.h | 1 + - src/hlua.c | 16 ++++++++++++++-- - 2 files changed, 15 insertions(+), 2 deletions(-) - -diff --git a/include/types/applet.h b/include/types/applet.h -index 46b2bc10..aee9167e 100644 ---- a/include/types/applet.h -+++ b/include/types/applet.h -@@ -122,6 +122,7 @@ struct appctx { - struct hlua_socket *socket; - struct list wake_on_read; - struct list wake_on_write; -+ int die; - } hlua; - struct { - struct hlua hlua; -diff --git a/src/hlua.c b/src/hlua.c -index 2d312804..eb003558 100644 ---- a/src/hlua.c -+++ b/src/hlua.c -@@ -1544,6 +1544,15 @@ static void hlua_socket_handler(struct appctx *appctx) - struct stream_interface *si = appctx->owner; - struct connection *c = objt_conn(si_opposite(si)->end); - -+ if (appctx->ctx.hlua.die) { -+ si_shutw(si); -+ si_shutr(si); -+ si_ic(si)->flags |= CF_READ_NULL; -+ hlua_com_wake(&appctx->ctx.hlua.wake_on_read); -+ hlua_com_wake(&appctx->ctx.hlua.wake_on_write); -+ stream_shutdown(si_strm(si), SF_ERR_KILLED); -+ } -+ - /* If the connection object is not avalaible, close all the - * streams and wakeup everithing waiting for. - */ -@@ -1619,9 +1628,10 @@ __LJMP static int hlua_socket_gc(lua_State *L) - - /* Remove all reference between the Lua stack and the coroutine stream. */ - appctx = objt_appctx(socket->s->si[0].end); -- stream_shutdown(socket->s, SF_ERR_KILLED); - socket->s = NULL; - appctx->ctx.hlua.socket = NULL; -+ appctx->ctx.hlua.die = 1; -+ appctx_wakeup(appctx); - - return 0; - } -@@ -1641,10 +1651,11 @@ __LJMP static int hlua_socket_close(lua_State *L) - return 0; - - /* Close the stream and remove the associated stop task. */ -- stream_shutdown(socket->s, SF_ERR_KILLED); - appctx = objt_appctx(socket->s->si[0].end); - appctx->ctx.hlua.socket = NULL; - socket->s = NULL; -+ appctx->ctx.hlua.die = 1; -+ appctx_wakeup(appctx); - - return 0; - } -@@ -2316,6 +2327,7 @@ __LJMP static int hlua_socket_new(lua_State *L) - - appctx->ctx.hlua.socket = socket; - appctx->ctx.hlua.connected = 0; -+ appctx->ctx.hlua.die = 0; - LIST_INIT(&appctx->ctx.hlua.wake_on_write); - LIST_INIT(&appctx->ctx.hlua.wake_on_read); - --- -2.13.0 - diff --git a/net/haproxy/patches/0005-BUG-MEDIUM-lua-bad-memory-access.patch b/net/haproxy/patches/0005-BUG-MEDIUM-lua-bad-memory-access.patch deleted file mode 100644 index 97e4d9e1eb..0000000000 --- a/net/haproxy/patches/0005-BUG-MEDIUM-lua-bad-memory-access.patch +++ /dev/null @@ -1,46 +0,0 @@ -From ea3b479be6cacb399a6541a00b1bdce17b0179d0 Mon Sep 17 00:00:00 2001 -From: Thierry FOURNIER -Date: Mon, 17 Jul 2017 00:44:40 +0200 -Subject: [PATCH 05/18] BUG/MEDIUM: lua: bad memory access - -We cannot perform garbage collection on unreferenced thread. -This memory is now free and another Lua process can use it for -other things. - -HAProxy is monothread, so this bug doesn't cause crash. - -This patch must be backported in 1.6 and 1.7 -(cherry picked from commit 7bd10d58d3aecf7cf1e5ee7df01193e07128a52d) - -Signed-off-by: Willy Tarreau ---- - src/hlua.c | 12 +++--------- - 1 file changed, 3 insertions(+), 9 deletions(-) - -diff --git a/src/hlua.c b/src/hlua.c -index eb003558..a998860e 100644 ---- a/src/hlua.c -+++ b/src/hlua.c -@@ -895,16 +895,10 @@ void hlua_ctx_destroy(struct hlua *lua) - * the garbage collection. - */ - if (lua->flags & HLUA_MUST_GC) { -- if (!SET_SAFE_LJMP(lua->T)) -+ if (!SET_SAFE_LJMP(gL.T)) - return; -- lua_gc(lua->T, LUA_GCCOLLECT, 0); -- RESET_SAFE_LJMP(lua->T); -- if (lua_status(lua->T) != LUA_OK) { -- if (!SET_SAFE_LJMP(gL.T)) -- return; -- lua_gc(gL.T, LUA_GCCOLLECT, 0); -- RESET_SAFE_LJMP(gL.T); -- } -+ lua_gc(gL.T, LUA_GCCOLLECT, 0); -+ RESET_SAFE_LJMP(gL.T); - } - - lua->T = NULL; --- -2.13.0 - diff --git a/net/haproxy/patches/0006-DOC-update-CONTRIBUTING-regarding-optional-parts-and.patch b/net/haproxy/patches/0006-DOC-update-CONTRIBUTING-regarding-optional-parts-and.patch deleted file mode 100644 index 7fb83b156c..0000000000 --- a/net/haproxy/patches/0006-DOC-update-CONTRIBUTING-regarding-optional-parts-and.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 20850d19250eb530cab889bb9059a630b3f805a3 Mon Sep 17 00:00:00 2001 -From: Willy Tarreau -Date: Tue, 18 Jul 2017 06:56:40 +0200 -Subject: [PATCH 06/18] DOC: update CONTRIBUTING regarding optional parts and - message format - -Make it clear that optional components must not break when disabled, -that openssl is the only officially supported library and its support -must not be broken, and that bug fixes must always be detailed. -(cherry picked from commit 9d84cd602f4adb3954209eb14c94eea9254d1b5b) - -Signed-off-by: Willy Tarreau ---- - CONTRIBUTING | 21 ++++++++++++++++++++- - 1 file changed, 20 insertions(+), 1 deletion(-) - -diff --git a/CONTRIBUTING b/CONTRIBUTING -index 74a099bc..b2c2b493 100644 ---- a/CONTRIBUTING -+++ b/CONTRIBUTING -@@ -69,6 +69,16 @@ code : - Since most of these restrictions are just a matter of coding style, it is - normally not a problem to comply. - -+When modifying some optional subsystem (SSL, Lua, compression, device detection -+engines), please make sure the code continues to build (and to work) when these -+features are disabled. Similarly, when modifying the SSL stack, please always -+ensure that supported OpenSSL versions continue to build and to work, especially -+if you modify support for alternate libraries. Clean support for the legacy -+OpenSSL libraries is mandatory, support for its derivatives is a bonus and may -+occasionally break eventhough a great care is taken. In other words, if you -+provide a patch for OpenSSL you don't need to test its derivatives, but if you -+provide a patch for a derivative you also need to test with OpenSSL. -+ - If your work is very confidential and you can't publicly discuss it, you can - also mail willy@haproxy.org directly about it, but your mail may be waiting - several days in the queue before you get a response, if you get a response at -@@ -441,13 +451,22 @@ do not think about them anymore after a few patches. - way the subject is built. Please see the section below for more information - regarding this formatting. - -- As a rule of thumb, your patch must never be made only of a subject line, -+ As a rule of thumb, your patch MUST NEVER be made only of a subject line, - it *must* contain a description. Even one or two lines, or indicating - whether a backport is desired or not. It turns out that single-line commits - are so rare in the Git world that they require special manual (hence - painful) handling when they are backported, and at least for this reason - it's important to keep this in mind. - -+ Each patch fixing a bug MUST be tagged with "BUG", a severity level, an -+ indication of the affected subsystem and a brief description of the nature -+ of the issue in the subject line, and a detailed analysis in the message -+ body. The explanation of the user-visible impact and the need for -+ backporting to stable branches or not are MANDATORY. Bug fixes with no -+ indication will simply be rejected as they are very likely to cause more -+ harm when nobody is able to tell whether or not the patch needs to be -+ backported or can be reverted in case of regression. -+ - 12) Discuss on the mailing list - - When submitting changes, please always CC the mailing list address so that --- -2.13.0 - diff --git a/net/haproxy/patches/0007-DOC-update-the-list-of-OpenSSL-versions-in-the-READM.patch b/net/haproxy/patches/0007-DOC-update-the-list-of-OpenSSL-versions-in-the-READM.patch deleted file mode 100644 index 7be8bc0058..0000000000 --- a/net/haproxy/patches/0007-DOC-update-the-list-of-OpenSSL-versions-in-the-READM.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 8d99949c4c51d95c14fb2b09d18e1cff058f0c17 Mon Sep 17 00:00:00 2001 -From: Willy Tarreau -Date: Tue, 18 Jul 2017 06:58:16 +0200 -Subject: [PATCH 07/18] DOC: update the list of OpenSSL versions in the README - -1.1.0 is also supported nowadays. Also mention the best effort support -for derivatives. -(cherry picked from commit 7ab16868bc6e9d5ef879e1046effa035789835cc) - -Signed-off-by: Willy Tarreau ---- - README | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/README b/README -index 839d06ec..8ad70e66 100644 ---- a/README -+++ b/README -@@ -113,8 +113,12 @@ build fails due to missing symbols such as deflateInit(), then try again with - Your are strongly encouraged to always use an up-to-date version of OpenSSL, as - found on https://www.openssl.org/ as vulnerabilities are occasionally found and - you don't want them on your systems. HAProxy is known to build correctly on all --currently supported branches (0.9.8, 1.0.0, 1.0.1 and 1.0.2 at the time of --writing). Branch 1.0.2 is recommended for the richest features. -+currently supported branches (0.9.8, 1.0.0, 1.0.1, 1.0.2 and 1.1.0 at the time -+of writing). Branch 1.0.2 is currently recommended for the best combination of -+features and stability. Asynchronous engines require OpenSSL 1.1.0 though. It's -+worth mentionning that some OpenSSL derivatives are also reported to work but -+may occasionally break. Patches to fix them are welcome but please read the -+CONTRIBUTING file first. - - To link OpenSSL statically against haproxy, build OpenSSL with the no-shared - keyword and install it to a local directory, so your system is not affected : --- -2.13.0 - diff --git a/net/haproxy/patches/0008-MINOR-tools-add-a-portable-timegm-alternative.patch b/net/haproxy/patches/0008-MINOR-tools-add-a-portable-timegm-alternative.patch deleted file mode 100644 index 4546258998..0000000000 --- a/net/haproxy/patches/0008-MINOR-tools-add-a-portable-timegm-alternative.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 3e21b8d25ad148ef4e6544f28a8b2305f9484a7b Mon Sep 17 00:00:00 2001 -From: Willy Tarreau -Date: Wed, 19 Jul 2017 19:05:29 +0200 -Subject: [PATCH 08/18] MINOR: tools: add a portable timegm() alternative -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -timegm() is not provided everywhere and the documentation on how to -replace it is bogus as it proposes an inefficient and non-thread safe -alternative. - -Here we reimplement everything needed to compute the number of seconds -since Epoch based on the broken down fields in struct tm. It is only -guaranteed to return correct values for correct inputs. It was successfully -tested with all possible 32-bit values of time_t converted to struct tm -using gmtime() and back to time_t using the legacy timegm() and this -function, and both functions always produced the same result. - -Thanks to Benoît Garnier for an instructive discussion and detailed -explanations of the various time functions, leading to this solution. -(cherry picked from commit cb1949b8b30b8db7e05546da2939eff2b5973321) - -Signed-off-by: Willy Tarreau ---- - include/common/standard.h | 21 ++++++++++++++++++ - src/standard.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 75 insertions(+) - -diff --git a/include/common/standard.h b/include/common/standard.h -index 87f90a65..c19c368b 100644 ---- a/include/common/standard.h -+++ b/include/common/standard.h -@@ -624,6 +624,27 @@ static inline void get_gmtime(const time_t now, struct tm *tm) - gmtime_r(&now, tm); - } - -+/* Counts a number of elapsed days since 01/01/0000 based solely on elapsed -+ * years and assuming the regular rule for leap years applies. It's fake but -+ * serves as a temporary origin. It's worth remembering that it's the first -+ * year of each period that is leap and not the last one, so for instance year -+ * 1 sees 366 days since year 0 was leap. For this reason we have to apply -+ * modular arithmetics which is why we offset the year by 399 before -+ * subtracting the excess at the end. No overflow here before ~11.7 million -+ * years. -+ */ -+static inline unsigned int days_since_zero(unsigned int y) -+{ -+ return y * 365 + (y + 399) / 4 - (y + 399) / 100 + (y + 399) / 400 -+ - 399 / 4 + 399 / 100; -+} -+ -+/* Returns the number of seconds since 01/01/1970 0:0:0 GMT for GMT date . -+ * It is meant as a portable replacement for timegm() for use with valid inputs. -+ * Returns undefined results for invalid dates (eg: months out of range 0..11). -+ */ -+extern time_t my_timegm(const struct tm *tm); -+ - /* This function parses a time value optionally followed by a unit suffix among - * "d", "h", "m", "s", "ms" or "us". It converts the value into the unit - * expected by the caller. The computation does its best to avoid overflows. -diff --git a/src/standard.c b/src/standard.c -index 8df1da6c..e1d414f3 100644 ---- a/src/standard.c -+++ b/src/standard.c -@@ -2841,6 +2841,60 @@ char *localdate2str_log(char *dst, time_t t, struct tm *tm, size_t size) - return dst; - } - -+/* Returns the number of seconds since 01/01/1970 0:0:0 GMT for GMT date . -+ * It is meant as a portable replacement for timegm() for use with valid inputs. -+ * Returns undefined results for invalid dates (eg: months out of range 0..11). -+ */ -+time_t my_timegm(const struct tm *tm) -+{ -+ /* Each month has 28, 29, 30 or 31 days, or 28+N. The date in the year -+ * is thus (current month - 1)*28 + cumulated_N[month] to count the -+ * sum of the extra N days for elapsed months. The sum of all these N -+ * days doesn't exceed 30 for a complete year (366-12*28) so it fits -+ * in a 5-bit word. This means that with 60 bits we can represent a -+ * matrix of all these values at once, which is fast and efficient to -+ * access. The extra February day for leap years is not counted here. -+ * -+ * Jan : none = 0 (0) -+ * Feb : Jan = 3 (3) -+ * Mar : Jan..Feb = 3 (3 + 0) -+ * Apr : Jan..Mar = 6 (3 + 0 + 3) -+ * May : Jan..Apr = 8 (3 + 0 + 3 + 2) -+ * Jun : Jan..May = 11 (3 + 0 + 3 + 2 + 3) -+ * Jul : Jan..Jun = 13 (3 + 0 + 3 + 2 + 3 + 2) -+ * Aug : Jan..Jul = 16 (3 + 0 + 3 + 2 + 3 + 2 + 3) -+ * Sep : Jan..Aug = 19 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3) -+ * Oct : Jan..Sep = 21 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3 + 2) -+ * Nov : Jan..Oct = 24 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3 + 2 + 3) -+ * Dec : Jan..Nov = 26 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3 + 2 + 3 + 2) -+ */ -+ uint64_t extra = -+ ( 0ULL << 0*5) + ( 3ULL << 1*5) + ( 3ULL << 2*5) + /* Jan, Feb, Mar, */ -+ ( 6ULL << 3*5) + ( 8ULL << 4*5) + (11ULL << 5*5) + /* Apr, May, Jun, */ -+ (13ULL << 6*5) + (16ULL << 7*5) + (19ULL << 8*5) + /* Jul, Aug, Sep, */ -+ (21ULL << 9*5) + (24ULL << 10*5) + (26ULL << 11*5); /* Oct, Nov, Dec, */ -+ -+ unsigned int y = tm->tm_year + 1900; -+ unsigned int m = tm->tm_mon; -+ unsigned long days = 0; -+ -+ /* days since 1/1/1970 for full years */ -+ days += days_since_zero(y) - days_since_zero(1970); -+ -+ /* days for full months in the current year */ -+ days += 28 * m + ((extra >> (m * 5)) & 0x1f); -+ -+ /* count + 1 after March for leap years. A leap year is a year multiple -+ * of 4, unless it's multiple of 100 without being multiple of 400. 2000 -+ * is leap, 1900 isn't, 1904 is. -+ */ -+ if ((m > 1) && !(y & 3) && ((y % 100) || !(y % 400))) -+ days++; -+ -+ days += tm->tm_mday - 1; -+ return days * 86400ULL + tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; -+} -+ - /* This function check a char. It returns true and updates - * and pointer to the new position if the - * character is found. --- -2.13.0 - diff --git a/net/haproxy/patches/0009-BUILD-lua-replace-timegm-with-my_timegm-to-fix-build.patch b/net/haproxy/patches/0009-BUILD-lua-replace-timegm-with-my_timegm-to-fix-build.patch deleted file mode 100644 index 623ce95f5c..0000000000 --- a/net/haproxy/patches/0009-BUILD-lua-replace-timegm-with-my_timegm-to-fix-build.patch +++ /dev/null @@ -1,38 +0,0 @@ -From df1655a6c0e4431317cc66c67693281092a952b0 Mon Sep 17 00:00:00 2001 -From: Willy Tarreau -Date: Wed, 19 Jul 2017 19:08:48 +0200 -Subject: [PATCH 09/18] BUILD: lua: replace timegm() with my_timegm() to fix - build on Solaris 10 - -Akhnin Nikita reported that Lua doesn't build on Solaris 10 because -the code uses timegm() to parse a date, which is not provided there. -The recommended way to implement timegm() is broken in the man page, -as it is based on a change of the TZ environment variable at run time -before calling the function (which is obviously not thread safe, and -terribly inefficient). - -Here instead we rely on the new my_timegm() function, it should be -sufficient for all known use cases. -(cherry picked from commit abd9bb20b76818c9f461a82b72b10818736ff8b3) - -Signed-off-by: Willy Tarreau ---- - src/hlua_fcn.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c -index 58905d7d..fe899a4a 100644 ---- a/src/hlua_fcn.c -+++ b/src/hlua_fcn.c -@@ -287,7 +287,7 @@ static int hlua_parse_date(lua_State *L, int (*fcn)(const char *, int, struct tm - * the timezone from the broken-down time, it must be fixed - * after the conversion. - */ -- time = timegm(&tm); -+ time = my_timegm(&tm); - if (time == -1) { - lua_pushnil(L); - return 1; --- -2.13.0 - diff --git a/net/haproxy/patches/0010-DOC-Updated-51Degrees-git-URL-to-point-to-a-stable-v.patch b/net/haproxy/patches/0010-DOC-Updated-51Degrees-git-URL-to-point-to-a-stable-v.patch deleted file mode 100644 index 2deb9a3487..0000000000 --- a/net/haproxy/patches/0010-DOC-Updated-51Degrees-git-URL-to-point-to-a-stable-v.patch +++ /dev/null @@ -1,32 +0,0 @@ -From e14ec1d816de60b648dd7cb6c55b665f5163156b Mon Sep 17 00:00:00 2001 -From: ben51degrees -Date: Wed, 19 Jul 2017 16:22:04 +0100 -Subject: [PATCH 10/18] DOC: Updated 51Degrees git URL to point to a stable - version. - -The previously documented location doesn't work anymore and must not be -used. Warning for backports, different branches are in use depending on -the version (v3.2.10 for 1.7, v3.2.5 for 1.6). -(cherry picked from commit ac752ff68cd3ac88a7a27ce17daa5c3f0c839694) - -Signed-off-by: Willy Tarreau ---- - doc/51Degrees-device-detection.txt | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/doc/51Degrees-device-detection.txt b/doc/51Degrees-device-detection.txt -index 1ee912d9..71b2eb76 100644 ---- a/doc/51Degrees-device-detection.txt -+++ b/doc/51Degrees-device-detection.txt -@@ -14,7 +14,7 @@ headers as configurable parameters. - In order to enable 51Degrees download the 51Degrees source code from the - official github repository : - -- git clone https://github.com/51Degrees/Device-Detection -+ git clone https://git.51Degrees.com/Device-Detection.git -b v3.2.10 - - then run 'make' with USE_51DEGREES and 51DEGREES_SRC set. Both 51DEGREES_INC - and 51DEGREES_LIB may additionally be used to force specific different paths --- -2.13.0 - diff --git a/net/haproxy/patches/0011-BUG-MINOR-http-Set-the-response-error-state-in-http_.patch b/net/haproxy/patches/0011-BUG-MINOR-http-Set-the-response-error-state-in-http_.patch deleted file mode 100644 index 435a457a0e..0000000000 --- a/net/haproxy/patches/0011-BUG-MINOR-http-Set-the-response-error-state-in-http_.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 9304b76fb37a36f6249ec963093d74210bd237f6 Mon Sep 17 00:00:00 2001 -From: Christopher Faulet -Date: Tue, 18 Jul 2017 10:35:55 +0200 -Subject: [PATCH 11/18] BUG/MINOR: http: Set the response error state in - http_sync_res_state - -This is just typo. It may only report a wrong response message state in -"show errors" on the CLI. - -This patch must be backported in 1.7. - -(cherry picked from commit a3992e06a6e74142d9784d18d8cb3527fadb64d6) -Signed-off-by: William Lallemand ---- - src/proto_http.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/proto_http.c b/src/proto_http.c -index 94c8d639..796955f5 100644 ---- a/src/proto_http.c -+++ b/src/proto_http.c -@@ -5530,7 +5530,7 @@ int http_sync_res_state(struct stream *s) - goto http_msg_closed; - } - else if (chn->flags & CF_SHUTW) { -- txn->req.err_state = txn->req.msg_state; -+ txn->rsp.err_state = txn->rsp.msg_state; - txn->rsp.msg_state = HTTP_MSG_ERROR; - s->be->be_counters.cli_aborts++; - if (objt_server(s->target)) --- -2.13.0 - diff --git a/net/haproxy/patches/0012-MINOR-http-Reorder-rewrite-checks-in-http_resync_sta.patch b/net/haproxy/patches/0012-MINOR-http-Reorder-rewrite-checks-in-http_resync_sta.patch deleted file mode 100644 index c26e080930..0000000000 --- a/net/haproxy/patches/0012-MINOR-http-Reorder-rewrite-checks-in-http_resync_sta.patch +++ /dev/null @@ -1,100 +0,0 @@ -From a49007a187ab7fddfcec58e1d9fc8a707e4531c9 Mon Sep 17 00:00:00 2001 -From: Christopher Faulet -Date: Tue, 18 Jul 2017 11:18:46 +0200 -Subject: [PATCH 12/18] MINOR: http: Reorder/rewrite checks in - http_resync_states - -The previous patch removed the forced symmetry of the TUNNEL mode during the -state synchronization. Here, we take care to remove body analyzer only on the -channel in TUNNEL mode. In fact, today, this change has no effect because both -sides are switched in same time. But this way, with some changes, it will be -possible to keep body analyzer on a side (to finish the states synchronization) -with the other one in TUNNEL mode. - -WARNING: This patch will be used to fix a bug. The fix will be commited in a -very next commit. So if the fix is backported, this one must be backported too. - -(cherry picked from commit f77bb539d4846ab278269b99a3165a5608ca0cf4) -Signed-off-by: William Lallemand ---- - src/proto_http.c | 48 +++++++++++++++++++++++++++++------------------- - 1 file changed, 29 insertions(+), 19 deletions(-) - -diff --git a/src/proto_http.c b/src/proto_http.c -index 796955f5..aaf9f648 100644 ---- a/src/proto_http.c -+++ b/src/proto_http.c -@@ -5577,34 +5577,27 @@ int http_resync_states(struct stream *s) - - /* OK, both state machines agree on a compatible state. - * There are a few cases we're interested in : -- * - HTTP_MSG_TUNNEL on either means we have to disable both analysers - * - HTTP_MSG_CLOSED on both sides means we've reached the end in both - * directions, so let's simply disable both analysers. -- * - HTTP_MSG_CLOSED on the response only means we must abort the -- * request. -- * - HTTP_MSG_CLOSED on the request and HTTP_MSG_DONE on the response -- * with server-close mode means we've completed one request and we -- * must re-initialize the server connection. -+ * - HTTP_MSG_CLOSED on the response only or HTTP_MSG_ERROR on either -+ * means we must abort the request. -+ * - HTTP_MSG_TUNNEL on either means we have to disable analyser on -+ * corresponding channel. -+ * - HTTP_MSG_DONE or HTTP_MSG_CLOSED on the request and HTTP_MSG_DONE -+ * on the response with server-close mode means we've completed one -+ * request and we must re-initialize the server connection. - */ -- -- if (txn->req.msg_state == HTTP_MSG_TUNNEL || -- txn->rsp.msg_state == HTTP_MSG_TUNNEL || -- (txn->req.msg_state == HTTP_MSG_CLOSED && -- txn->rsp.msg_state == HTTP_MSG_CLOSED)) { -+ if (txn->req.msg_state == HTTP_MSG_CLOSED && -+ txn->rsp.msg_state == HTTP_MSG_CLOSED) { - s->req.analysers &= AN_REQ_FLT_END; - channel_auto_close(&s->req); - channel_auto_read(&s->req); - s->res.analysers &= AN_RES_FLT_END; - channel_auto_close(&s->res); - channel_auto_read(&s->res); -- if (txn->req.msg_state == HTTP_MSG_TUNNEL && HAS_REQ_DATA_FILTERS(s)) -- s->req.analysers |= AN_REQ_FLT_XFER_DATA; -- if (txn->rsp.msg_state == HTTP_MSG_TUNNEL && HAS_RSP_DATA_FILTERS(s)) -- s->res.analysers |= AN_RES_FLT_XFER_DATA; -- } -- else if ((txn->req.msg_state >= HTTP_MSG_DONE && -- (txn->rsp.msg_state == HTTP_MSG_CLOSED || (s->res.flags & CF_SHUTW))) || -- txn->rsp.msg_state == HTTP_MSG_ERROR || -+ } -+ else if (txn->rsp.msg_state == HTTP_MSG_CLOSED || -+ txn->rsp.msg_state == HTTP_MSG_ERROR || - txn->req.msg_state == HTTP_MSG_ERROR) { - s->res.analysers &= AN_RES_FLT_END; - channel_auto_close(&s->res); -@@ -5615,6 +5608,23 @@ int http_resync_states(struct stream *s) - channel_auto_read(&s->req); - channel_truncate(&s->req); - } -+ else if (txn->req.msg_state == HTTP_MSG_TUNNEL || -+ txn->rsp.msg_state == HTTP_MSG_TUNNEL) { -+ if (txn->req.msg_state == HTTP_MSG_TUNNEL) { -+ s->req.analysers &= AN_REQ_FLT_END; -+ if (HAS_REQ_DATA_FILTERS(s)) -+ s->req.analysers |= AN_REQ_FLT_XFER_DATA; -+ } -+ if (txn->rsp.msg_state == HTTP_MSG_TUNNEL) { -+ s->res.analysers &= AN_RES_FLT_END; -+ if (HAS_RSP_DATA_FILTERS(s)) -+ s->res.analysers |= AN_RES_FLT_XFER_DATA; -+ } -+ channel_auto_close(&s->req); -+ channel_auto_read(&s->req); -+ channel_auto_close(&s->res); -+ channel_auto_read(&s->res); -+ } - else if ((txn->req.msg_state == HTTP_MSG_DONE || - txn->req.msg_state == HTTP_MSG_CLOSED) && - txn->rsp.msg_state == HTTP_MSG_DONE && --- -2.13.0 - diff --git a/net/haproxy/patches/0013-MINOR-http-Switch-requests-responses-in-TUNNEL-mode-.patch b/net/haproxy/patches/0013-MINOR-http-Switch-requests-responses-in-TUNNEL-mode-.patch deleted file mode 100644 index ea2923d68b..0000000000 --- a/net/haproxy/patches/0013-MINOR-http-Switch-requests-responses-in-TUNNEL-mode-.patch +++ /dev/null @@ -1,153 +0,0 @@ -From 1430a0c0f62fcff4303706f5baf2b544e00fcda3 Mon Sep 17 00:00:00 2001 -From: Christopher Faulet -Date: Tue, 18 Jul 2017 10:48:24 +0200 -Subject: [PATCH 13/18] MINOR: http: Switch requests/responses in TUNNEL mode - only by checking txn flags - -Today, the only way to have a request or a response in HTTP_MSG_TUNNEL state is -to have the flag TX_CON_WANT_TUN set on the transaction. So this is a symmetric -state. Both the request and the response are switch in same time in this -state. This can be done only by checking transaction flags instead of relying on -the other side state. This is the purpose of this patch. - -This way, if for any reason we need to switch only one side in TUNNEL mode, it -will be possible. And to prepare asymmetric cases, we check channel flags in -DONE _AND_ TUNNEL states. - -WARNING: This patch will be used to fix a bug. The fix will be commited in a -very next commit. So if the fix is backported, this one must be backported too. - -(cherry picked from commit 4be9803914ae7156109c915659aad216e4a3c6c1) -Signed-off-by: William Lallemand ---- - src/proto_http.c | 65 +++++++++++++++++++------------------------------------- - 1 file changed, 22 insertions(+), 43 deletions(-) - -diff --git a/src/proto_http.c b/src/proto_http.c -index aaf9f648..00a92cdb 100644 ---- a/src/proto_http.c -+++ b/src/proto_http.c -@@ -5294,7 +5294,7 @@ int http_sync_req_state(struct stream *s) - unsigned int old_flags = chn->flags; - unsigned int old_state = txn->req.msg_state; - -- if (unlikely(txn->req.msg_state < HTTP_MSG_BODY)) -+ if (unlikely(txn->req.msg_state < HTTP_MSG_DONE)) - return 0; - - if (txn->req.msg_state == HTTP_MSG_DONE) { -@@ -5338,13 +5338,6 @@ int http_sync_req_state(struct stream *s) - goto wait_other_side; - } - -- if (txn->rsp.msg_state == HTTP_MSG_TUNNEL) { -- /* if any side switches to tunnel mode, the other one does too */ -- channel_auto_read(chn); -- txn->req.msg_state = HTTP_MSG_TUNNEL; -- goto wait_other_side; -- } -- - /* When we get here, it means that both the request and the - * response have finished receiving. Depending on the connection - * mode, we'll have to wait for the last bytes to leave in either -@@ -5377,20 +5370,7 @@ int http_sync_req_state(struct stream *s) - } - } - -- if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) { -- /* if we've just closed an output, let's switch */ -- s->si[1].flags |= SI_FL_NOLINGER; /* we want to close ASAP */ -- -- if (!channel_is_empty(chn)) { -- txn->req.msg_state = HTTP_MSG_CLOSING; -- goto http_msg_closing; -- } -- else { -- txn->req.msg_state = HTTP_MSG_CLOSED; -- goto http_msg_closed; -- } -- } -- goto wait_other_side; -+ goto check_channel_flags; - } - - if (txn->req.msg_state == HTTP_MSG_CLOSING) { -@@ -5419,6 +5399,16 @@ int http_sync_req_state(struct stream *s) - goto wait_other_side; - } - -+ check_channel_flags: -+ /* Here, we are in HTTP_MSG_DONE or HTTP_MSG_TUNNEL */ -+ if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) { -+ /* if we've just closed an output, let's switch */ -+ s->si[1].flags |= SI_FL_NOLINGER; /* we want to close ASAP */ -+ txn->req.msg_state = HTTP_MSG_CLOSING; -+ goto http_msg_closing; -+ } -+ -+ - wait_other_side: - return txn->req.msg_state != old_state || chn->flags != old_flags; - } -@@ -5438,7 +5428,7 @@ int http_sync_res_state(struct stream *s) - unsigned int old_flags = chn->flags; - unsigned int old_state = txn->rsp.msg_state; - -- if (unlikely(txn->rsp.msg_state < HTTP_MSG_BODY)) -+ if (unlikely(txn->rsp.msg_state < HTTP_MSG_DONE)) - return 0; - - if (txn->rsp.msg_state == HTTP_MSG_DONE) { -@@ -5461,14 +5451,6 @@ int http_sync_res_state(struct stream *s) - goto wait_other_side; - } - -- if (txn->req.msg_state == HTTP_MSG_TUNNEL) { -- /* if any side switches to tunnel mode, the other one does too */ -- channel_auto_read(chn); -- txn->rsp.msg_state = HTTP_MSG_TUNNEL; -- chn->flags |= CF_NEVER_WAIT; -- goto wait_other_side; -- } -- - /* When we get here, it means that both the request and the - * response have finished receiving. Depending on the connection - * mode, we'll have to wait for the last bytes to leave in either -@@ -5506,18 +5488,7 @@ int http_sync_res_state(struct stream *s) - txn->rsp.msg_state = HTTP_MSG_TUNNEL; - } - -- if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) { -- /* if we've just closed an output, let's switch */ -- if (!channel_is_empty(chn)) { -- txn->rsp.msg_state = HTTP_MSG_CLOSING; -- goto http_msg_closing; -- } -- else { -- txn->rsp.msg_state = HTTP_MSG_CLOSED; -- goto http_msg_closed; -- } -- } -- goto wait_other_side; -+ goto check_channel_flags; - } - - if (txn->rsp.msg_state == HTTP_MSG_CLOSING) { -@@ -5548,6 +5519,14 @@ int http_sync_res_state(struct stream *s) - goto wait_other_side; - } - -+ check_channel_flags: -+ /* Here, we are in HTTP_MSG_DONE or HTTP_MSG_TUNNEL */ -+ if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) { -+ /* if we've just closed an output, let's switch */ -+ txn->rsp.msg_state = HTTP_MSG_CLOSING; -+ goto http_msg_closing; -+ } -+ - wait_other_side: - /* We force the response to leave immediately if we're waiting for the - * other side, since there is no pending shutdown to push it out. --- -2.13.0 - diff --git a/net/haproxy/patches/0014-BUG-MEDIUM-http-Switch-HTTP-responses-in-TUNNEL-mode.patch b/net/haproxy/patches/0014-BUG-MEDIUM-http-Switch-HTTP-responses-in-TUNNEL-mode.patch deleted file mode 100644 index aca24c1ec6..0000000000 --- a/net/haproxy/patches/0014-BUG-MEDIUM-http-Switch-HTTP-responses-in-TUNNEL-mode.patch +++ /dev/null @@ -1,118 +0,0 @@ -From f82344c1cf20afcf77e8c3df8f9d341d659da93b Mon Sep 17 00:00:00 2001 -From: Christopher Faulet -Date: Tue, 18 Jul 2017 11:42:08 +0200 -Subject: [PATCH 14/18] BUG/MEDIUM: http: Switch HTTP responses in TUNNEL mode - when body length is undefined - -When the body length of a HTTP response is undefined, the HTTP parser is blocked -in the body parsing. Before HAProxy 1.7, in this case, because -AN_RES_HTTP_XFER_BODY is never set, there is no visible effect. When the server -closes its connection to terminate the response, HAProxy catches it as a normal -closure. Since 1.7, we always set this analyzer to enter at least once in -http_response_forward_body. But, in the present case, when the server connection -is closed, http_response_forward_body is called one time too many. The response -is correctly sent to the client, but an error is catched and logged with "SD--" -flags. - -To reproduce the bug, you can use the configuration "tests/test-fsm.cfg". The -tests 3 and 21 hit the bug. - -Idea to fix the bug is to switch the response in TUNNEL mode without switching -the request. This is possible because of previous patches. - -First, we need to detect responses with undefined body length during states -synchronization. Excluding tunnelled transactions, when the response length is -undefined, TX_CON_WANT_CLO is always set on the transaction. So, when states are -synchronized, if TX_CON_WANT_CLO is set, the response is switched in TUNNEL mode -and the request remains unchanged. - -Then, in http_msg_forward_body, we add a specific check to switch the response -in DONE mode if the body length is undefined and if there is no data filter. - -This patch depends on following previous commits: - - * MINOR: http: Switch requests/responses in TUNNEL mode only by checking txn flags - * MINOR: http: Reorder/rewrite checks in http_resync_states - -This patch must be backported in 1.7 with 2 previous ones. - -(cherry picked from commit 1486b0ab6de744e14ae684af105951345534f9ec) -Signed-off-by: William Lallemand ---- - src/proto_http.c | 37 +++++++++++++++++++++++++------------ - 1 file changed, 25 insertions(+), 12 deletions(-) - -diff --git a/src/proto_http.c b/src/proto_http.c -index 00a92cdb..e776e4d5 100644 ---- a/src/proto_http.c -+++ b/src/proto_http.c -@@ -5354,7 +5354,16 @@ int http_sync_req_state(struct stream *s) - * let's enforce it now that we're not expecting any new - * data to come. The caller knows the stream is complete - * once both states are CLOSED. -+ * -+ * However, there is an exception if the response -+ * length is undefined. In this case, we need to wait -+ * the close from the server. The response will be -+ * switched in TUNNEL mode until the end. - */ -+ if (!(txn->rsp.flags & HTTP_MSGF_XFER_LEN) && -+ txn->rsp.msg_state != HTTP_MSG_CLOSED) -+ goto check_channel_flags; -+ - if (!(chn->flags & (CF_SHUTW|CF_SHUTW_NOW))) { - channel_shutr_now(chn); - channel_shutw_now(chn); -@@ -5471,8 +5480,16 @@ int http_sync_res_state(struct stream *s) - * let's enforce it now that we're not expecting any new - * data to come. The caller knows the stream is complete - * once both states are CLOSED. -+ * -+ * However, there is an exception if the response length -+ * is undefined. In this case, we switch in TUNNEL mode. - */ -- if (!(chn->flags & (CF_SHUTW|CF_SHUTW_NOW))) { -+ if (!(txn->rsp.flags & HTTP_MSGF_XFER_LEN)) { -+ channel_auto_read(chn); -+ txn->rsp.msg_state = HTTP_MSG_TUNNEL; -+ chn->flags |= CF_NEVER_WAIT; -+ } -+ else if (!(chn->flags & (CF_SHUTW|CF_SHUTW_NOW))) { - channel_shutr_now(chn); - channel_shutw_now(chn); - } -@@ -6952,14 +6969,6 @@ int http_response_forward_body(struct stream *s, struct channel *res, int an_bit - if ((msg->flags & HTTP_MSGF_TE_CHNK) || (msg->flags & HTTP_MSGF_COMPRESSING)) - res->flags |= CF_EXPECT_MORE; - -- /* If there is neither content-length, nor transfer-encoding header -- * _AND_ there is no data filtering, we can safely forward all data -- * indefinitely. */ -- if (!(msg->flags & HTTP_MSGF_XFER_LEN) && !HAS_DATA_FILTERS(s, res)) { -- buffer_flush(res->buf); -- channel_forward_forever(res); -- } -- - /* the stream handler will take care of timeouts and errors */ - return 0; - -@@ -7036,9 +7045,13 @@ http_msg_forward_body(struct stream *s, struct http_msg *msg) - goto missing_data_or_waiting; - } - -- /* The server still sending data that should be filtered */ -- if (!(msg->flags & HTTP_MSGF_XFER_LEN) && !(chn->flags & CF_SHUTR)) -- goto missing_data_or_waiting; -+ /* This check can only be true for a response. HTTP_MSGF_XFER_LEN is -+ * always set for a request. */ -+ if (!(msg->flags & HTTP_MSGF_XFER_LEN)) { -+ /* The server still sending data that should be filtered */ -+ if (!(chn->flags & CF_SHUTR) && HAS_DATA_FILTERS(s, chn)) -+ goto missing_data_or_waiting; -+ } - - msg->msg_state = HTTP_MSG_ENDING; - --- -2.13.0 - diff --git a/net/haproxy/patches/0015-BUG-MAJOR-http-Fix-possible-infinity-loop-in-http_sy.patch b/net/haproxy/patches/0015-BUG-MAJOR-http-Fix-possible-infinity-loop-in-http_sy.patch deleted file mode 100644 index 1552dfca89..0000000000 --- a/net/haproxy/patches/0015-BUG-MAJOR-http-Fix-possible-infinity-loop-in-http_sy.patch +++ /dev/null @@ -1,43 +0,0 @@ -From af9b52e92be8ca6a07f9156dcb0b08dd2ad8db75 Mon Sep 17 00:00:00 2001 -From: Christopher Faulet -Date: Thu, 20 Jul 2017 11:05:10 +0200 -Subject: [PATCH 15/18] BUG/MAJOR: http: Fix possible infinity loop in - http_sync_(req|res)_state - -In commit "MINOR: http: Switch requests/responses in TUNNEL mode only by -checking txn flags", it is possible to have an infinite loop on HTTP_MSG_CLOSING -state. - -(cherry picked from commit 56d260916f61e48c8b2f1fd2f9431afac776d160) -Signed-off-by: William Lallemand ---- - src/proto_http.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/proto_http.c b/src/proto_http.c -index e776e4d5..4a030013 100644 ---- a/src/proto_http.c -+++ b/src/proto_http.c -@@ -5394,8 +5394,8 @@ int http_sync_req_state(struct stream *s) - else if (chn->flags & CF_SHUTW) { - txn->req.err_state = txn->req.msg_state; - txn->req.msg_state = HTTP_MSG_ERROR; -- goto wait_other_side; - } -+ goto wait_other_side; - } - - if (txn->req.msg_state == HTTP_MSG_CLOSED) { -@@ -5523,8 +5523,8 @@ int http_sync_res_state(struct stream *s) - s->be->be_counters.cli_aborts++; - if (objt_server(s->target)) - objt_server(s->target)->counters.cli_aborts++; -- goto wait_other_side; - } -+ goto wait_other_side; - } - - if (txn->rsp.msg_state == HTTP_MSG_CLOSED) { --- -2.13.0 - diff --git a/net/haproxy/patches/0016-BUG-MINOR-lua-Fix-Server.get_addr-port-values.patch b/net/haproxy/patches/0016-BUG-MINOR-lua-Fix-Server.get_addr-port-values.patch deleted file mode 100644 index 0e1d9ab842..0000000000 --- a/net/haproxy/patches/0016-BUG-MINOR-lua-Fix-Server.get_addr-port-values.patch +++ /dev/null @@ -1,45 +0,0 @@ -From c00347899e9f0c3420f98c53eab1469644e28e06 Mon Sep 17 00:00:00 2001 -From: Nenad Merdanovic -Date: Sun, 23 Jul 2017 22:04:58 -0400 -Subject: [PATCH 16/18] BUG/MINOR: lua: Fix Server.get_addr() port values - -The get_addr() method of the Lua Server class was using the -'sockaddr_storage addr' member to get the port value. HAProxy does not -store ports in this member as it uses a separate member, called -'svc_port'. - -This fix should be backported to 1.7. - -(cherry picked from commit 3849473828f319829aff422d2fbbce0823e65d64) -Signed-off-by: William Lallemand ---- - src/hlua_fcn.c | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c -index fe899a4a..0752220e 100644 ---- a/src/hlua_fcn.c -+++ b/src/hlua_fcn.c -@@ -545,8 +545,7 @@ int hlua_server_get_addr(lua_State *L) - addr, INET_ADDRSTRLEN); - luaL_addstring(&b, addr); - luaL_addstring(&b, ":"); -- snprintf(addr, INET_ADDRSTRLEN, "%d", -- ntohs(((struct sockaddr_in *)&srv->addr)->sin_port)); -+ snprintf(addr, INET_ADDRSTRLEN, "%d", srv->svc_port); - luaL_addstring(&b, addr); - break; - case AF_INET6: -@@ -554,8 +553,7 @@ int hlua_server_get_addr(lua_State *L) - addr, INET_ADDRSTRLEN); - luaL_addstring(&b, addr); - luaL_addstring(&b, ":"); -- snprintf(addr, INET_ADDRSTRLEN, "%d", -- ntohs(((struct sockaddr_in6 *)&srv->addr)->sin6_port)); -+ snprintf(addr, INET_ADDRSTRLEN, "%d", srv->svc_port); - luaL_addstring(&b, addr); - break; - case AF_UNIX: --- -2.13.0 - diff --git a/net/haproxy/patches/0017-BUG-MINOR-lua-Correctly-use-INET6_ADDRSTRLEN-in-Serv.patch b/net/haproxy/patches/0017-BUG-MINOR-lua-Correctly-use-INET6_ADDRSTRLEN-in-Serv.patch deleted file mode 100644 index 408b42d704..0000000000 --- a/net/haproxy/patches/0017-BUG-MINOR-lua-Correctly-use-INET6_ADDRSTRLEN-in-Serv.patch +++ /dev/null @@ -1,34 +0,0 @@ -From e79fe9bc0ae363e91555f1ba64889e2ddf475b8e Mon Sep 17 00:00:00 2001 -From: Nenad Merdanovic -Date: Sun, 23 Jul 2017 22:04:59 -0400 -Subject: [PATCH 17/18] BUG/MINOR: lua: Correctly use INET6_ADDRSTRLEN in - Server.get_addr() - -The get_addr() method of the Lua Server class incorrectly used -INET_ADDRSTRLEN for IPv6 addresses resulting in failing to convert -longer IPv6 addresses to strings. - -This fix should be backported to 1.7. - -(cherry picked from commit a9f040453acc09e888c3f2dc983f15dcf3fa66e3) -Signed-off-by: William Lallemand ---- - src/hlua_fcn.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c -index 0752220e..f8b9b5ec 100644 ---- a/src/hlua_fcn.c -+++ b/src/hlua_fcn.c -@@ -550,7 +550,7 @@ int hlua_server_get_addr(lua_State *L) - break; - case AF_INET6: - inet_ntop(AF_INET6, &((struct sockaddr_in6 *)&srv->addr)->sin6_addr, -- addr, INET_ADDRSTRLEN); -+ addr, INET6_ADDRSTRLEN); - luaL_addstring(&b, addr); - luaL_addstring(&b, ":"); - snprintf(addr, INET_ADDRSTRLEN, "%d", srv->svc_port); --- -2.13.0 - diff --git a/net/haproxy/patches/0018-BUG-MINOR-lua-always-detach-the-tcp-http-tasks-befor.patch b/net/haproxy/patches/0018-BUG-MINOR-lua-always-detach-the-tcp-http-tasks-befor.patch deleted file mode 100644 index c1f2310cc2..0000000000 --- a/net/haproxy/patches/0018-BUG-MINOR-lua-always-detach-the-tcp-http-tasks-befor.patch +++ /dev/null @@ -1,45 +0,0 @@ -From dd18f945c26fc30872a52c66b06b5a0a86b10060 Mon Sep 17 00:00:00 2001 -From: Willy Tarreau -Date: Mon, 24 Jul 2017 17:35:27 +0200 -Subject: [PATCH 18/18] BUG/MINOR: lua: always detach the tcp/http tasks before - freeing them - -In hlua_{http,tcp}_applet_release(), a call to task_free() is performed -to release the task, but no task_delete() is made on these tasks. Till -now it wasn't much of a problem because this was normally not done with -the task in the run queue, and the task was never put into the wait queue -since it doesn't have any timer. But with threading it will become an -issue. And not having this already prevents another bug from being fixed. - -Thanks to Christopher for spotting this one. A backport to 1.7 and 1.6 is -preferred for safety. - -(cherry picked from commit bd7fc95edbce821f1d7b745a7b75deef4d6b1e27) -Signed-off-by: William Lallemand ---- - src/hlua.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/hlua.c b/src/hlua.c -index a998860e..67b9458c 100644 ---- a/src/hlua.c -+++ b/src/hlua.c -@@ -5948,6 +5948,7 @@ error: - - static void hlua_applet_tcp_release(struct appctx *ctx) - { -+ task_delete(ctx->ctx.hlua_apptcp.task); - task_free(ctx->ctx.hlua_apptcp.task); - ctx->ctx.hlua_apptcp.task = NULL; - hlua_ctx_destroy(&ctx->ctx.hlua_apptcp.hlua); -@@ -6226,6 +6227,7 @@ error: - - static void hlua_applet_http_release(struct appctx *ctx) - { -+ task_delete(ctx->ctx.hlua_apphttp.task); - task_free(ctx->ctx.hlua_apphttp.task); - ctx->ctx.hlua_apphttp.task = NULL; - hlua_ctx_destroy(&ctx->ctx.hlua_apphttp.hlua); --- -2.13.0 - diff --git a/net/knxd/Makefile b/net/knxd/Makefile index 76711f3f9f..b77860dc2f 100644 --- a/net/knxd/Makefile +++ b/net/knxd/Makefile @@ -12,7 +12,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=knxd PKG_VERSION:=0.14.18 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/knxd/knxd.git @@ -47,7 +47,8 @@ EIB KNX Daemon endef define Package/knxd/conffiles -/etc/config/knxd.ini +/etc/knxd.ini +/etc/config/knxd endef TARGET_CXXFLAGS+= -std=c++0x @@ -72,7 +73,8 @@ define Package/knxd/install $(INSTALL_BIN) ./files/knxd.init $(1)/etc/init.d/knxd $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_DATA) ./files/knxd.ini $(1)/etc/config/knxd.ini + $(INSTALL_DATA) ./files/knxd.ini $(1)/etc/knxd.ini + $(INSTALL_DATA) ./files/knxd.config $(1)/etc/config/knxd endef $(eval $(call BuildPackage,knxd)) diff --git a/net/knxd/files/knxd.config b/net/knxd/files/knxd.config new file mode 100644 index 0000000000..81dacaabd6 --- /dev/null +++ b/net/knxd/files/knxd.config @@ -0,0 +1,43 @@ +config daemon args + # driver:[arg] a Layer-2 driver to use (knxd supports more than one) + #option layer2 "" + # enable caching of group communication networkstate + option GroupCache 0 + # FILE start the programm as daemon. Output will be written to FILE if given + option daemon "/var/log/knxd.log" + #enable the EIBnet/IP server to answer discovery and description requests (SEARCH, DESCRIPTION) + option Discovery 1 + # EIBADDR set our EIB address to EIBADDR (default 0.0.1) + option eibaddr "0.0.2" + # LEVEL set error level + option error 0 + # PORT listen at TCP port PORT (default 6720) + option listen_tcp "6720" + # wait for L_Data_ind while sending (for all EMI based backends) + option no_emisend_queuing 0 + # SERVERNAME name of the EIBnet/IP server (default is 'knxd') + option Name "KNX2" + # do not assume KNXnet/IP Tunneling bus interface can handle parallel cEMI requests + option no_tunnel_client_queuing 0 + # the next Layer2 interface may not enter monitor mode + option no_monitor 0 + # enable EIBnet/IP Routing in the EIBnet/IP server + option Routing 1 + # [ip[:port]] starts an EIBnet/IP multicast server + option Server '224.0.23.12' + # MASK set trace flags (bitmask) + option trace 0 + # tpuarts backend should generate L2 acks for all group telegrams + option tpuarts_ack_all_group 0 + # tpuarts backend should generate L2 acks for all individual telegrams + option tpuarts_ack_all_individual 0 + # tpuarts backend should should use a full interface reset (for Disch TPUART interfaces) + option tpuarts_disch_reset 0 + # enable EIBnet/IP Tunneling in the EIBnet/IP server + option Tunnelling 1 + # FILE listen at Unix domain socket FILE (default /tmp/eib) + option listen_local "/var/run/knxd" + # example with tpuarts interface + # option url 'tpuarts:/dev/ttyAMA0' + # example with IP interface in tunnel mode + option url 'usb:' diff --git a/net/knxd/files/knxd.init b/net/knxd/files/knxd.init index d3f8475554..92a08a12a9 100644 --- a/net/knxd/files/knxd.init +++ b/net/knxd/files/knxd.init @@ -33,15 +33,14 @@ start_service() { local options url config_load knxd append_parm args eibaddr "eibaddr" "0.0.1" - append_parm args client-addrs "client-addrs" "0.0.2:10" + append_parm args client_addrs "client-addrs" "0.0.2:10" append_parm args layer2 "layer2" append_bool args GroupCache "GroupCache" 0 append_parm args daemon "daemon" "/var/log/knxd.log" - append_bool args Discovery "Discovery" 1 append_parm args error "error" # "5" append_parm args listen_tcp "listen-tcp" "6720" append_parm args Interface "Interface" # "eth0" - append_parm args send-delay "send-delay" # "50" + append_parm args send_delay "send-delay" # "50" append_parm args Name "Name" "OpenWrt" append_bool args no_monitor "no-monitor" 0 append_bool args Routing "Routing" 0 @@ -50,11 +49,17 @@ start_service() { append_bool args tpuarts_ack_all_individual "tpuarts-ack-all-individual" 0 append_bool args tpuarts_disch_reset "tpuarts-disch-reset" 0 append_bool args Tunnelling "Tunnelling" 1 - append_bool args Server "Server" 1 + append_bool args Discovery "Discovery" 1 + append_parm args Server "Server" "224.0.23.12" append_parm args listen_local "listen-local" "/var/run/knxd" config_get url args url + if [ "$url" == "usb:" ] ; then + url="usb:""$(findknxusb | tail -n1 | sed -e 's/device: \([0-9]:[0-9]:[0-9]\):[0-9].*/\1/')" + fi + echo "/usr/lib/knxd_args $params $url" + /usr/lib/knxd_args $params $url > /tmp/etc/knxd.ini procd_open_instance - procd_set_param command $PROG $params $url + procd_set_param command $PROG "/tmp/etc/knxd.ini" procd_set_param respawn procd_close_instance } diff --git a/net/l7-protocols/Makefile b/net/l7-protocols/Makefile deleted file mode 100644 index b9f0310058..0000000000 --- a/net/l7-protocols/Makefile +++ /dev/null @@ -1,87 +0,0 @@ -# -# Copyright (C) 2014 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=l7-protocols -PKG_VERSION:=2009-05-28 -PKG_RELEASE:=2 -PKG_LICENSE:=GPL-2.0 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=@SF/l7-filter -PKG_HASH:=d6bf98a69268558543bd32fccea287cb3f14b37521d18c790e2b6f8dcfaa5381 - -include $(INCLUDE_DIR)/uclibc++.mk -include $(INCLUDE_DIR)/package.mk - -define Package/l7-protocols - SECTION:=net - CATEGORY:=Network - TITLE:=Protocols for layer7 filtering - URL:=http://l7-filter.sourceforge.net/ - SUBMENU:=Firewall - MAINTAINER:=Lim Guo Wei - DEPENDS:=iptables-mod-filter -endef - -define Package/l7-protocols/description - l7-filter classifies packets based on patterns in application - layer data. This allows correct classification of P2P traffic that - uses unpredictable ports as well as standard protocols running on - non-standard ports. -endef - -define Package/l7-protocols-testing - $(call Package/l7-protocols) - TITLE:=testing utilities for layer7 - DEPENDS+=l7-protocols $(CXX_DEPENDS) -endef - -define Package/l7-protocols-testing/description - testing utilities for layer 7 patterns -endef - -define Build/Configure -endef - -ifneq ($(SDK)$(CONFIG_PACKAGE_l7-protocols-testing),) - define Build/Compile - cd $(PKG_BUILD_DIR)/testing && $(MAKE) $(CONFIGURE_VARS) - endef -else - define Build/Compile - endef -endif - -define Package/l7-protocols/install - find $(PKG_BUILD_DIR) -name "README" -delete - $(INSTALL_DIR) $(1)/etc/l7-protocols - $(CP) $(PKG_BUILD_DIR)/extra \ - $(PKG_BUILD_DIR)/file_types \ - $(PKG_BUILD_DIR)/groups.sh \ - $(PKG_BUILD_DIR)/malware \ - $(PKG_BUILD_DIR)/protocols \ - $(1)/etc/l7-protocols -endef - -define Package/l7-protocols-testing/install - $(INSTALL_DIR) $(1)/etc/l7-protocols/testing - $(CP) $(PKG_BUILD_DIR)/testing/data \ - $(1)/etc/l7-protocols/testing - $(INSTALL_BIN) \ - $(PKG_BUILD_DIR)/testing/rand{chars,printable} \ - $(PKG_BUILD_DIR)/testing/test_speed-{kernel,userspace} \ - $(PKG_BUILD_DIR)/testing/match_kernel \ - $(PKG_BUILD_DIR)/testing/doallspeeds.sh \ - $(PKG_BUILD_DIR)/testing/test_match.sh \ - $(PKG_BUILD_DIR)/testing/timeit.sh \ - $(1)/etc/l7-protocols/testing -endef - -$(eval $(call BuildPackage,l7-protocols)) -$(eval $(call BuildPackage,l7-protocols-testing)) diff --git a/net/l7-protocols/patches/100-testing_crosscompile.patch b/net/l7-protocols/patches/100-testing_crosscompile.patch deleted file mode 100644 index b5d3953070..0000000000 --- a/net/l7-protocols/patches/100-testing_crosscompile.patch +++ /dev/null @@ -1,27 +0,0 @@ ---- a/testing/Makefile -+++ b/testing/Makefile -@@ -1,19 +1,19 @@ - all: randchars randprintable test_speed-kernel test_speed-userspace match_kernel - - randchars: randchars.c -- gcc -O2 -o randchars randchars.c -+ $(CC) $(CFLAGS) -o randchars randchars.c - - randprintable: randprintable.c -- gcc -O2 -o randprintable randprintable.c -+ $(CC) $(CFLAGS) -o randprintable randprintable.c - - test_speed-kernel: test_speed-kernel.c -- gcc -o test_speed-kernel test_speed-kernel.c -+ $(CC) $(CFLAGS) -o test_speed-kernel test_speed-kernel.c - - test_speed-userspace: test_speed-userspace.cpp l7-parse-patterns.cpp l7-parse-patterns.h -- g++ -Wall -o test_speed-userspace test_speed-userspace.cpp l7-parse-patterns.cpp -+ $(CXX) $(CXXFLAGS) -Wall -o test_speed-userspace test_speed-userspace.cpp l7-parse-patterns.cpp - - match_kernel: match-kernel.c -- gcc -O2 -o match_kernel match-kernel.c -+ $(CC) $(CFLAGS) -o match_kernel match-kernel.c - - clean: - rm -f randprintable randchars test_speed-kernel test_speed-userspace match_kernel diff --git a/net/l7-protocols/patches/101-testing-timeit.patch b/net/l7-protocols/patches/101-testing-timeit.patch deleted file mode 100644 index 665688927a..0000000000 --- a/net/l7-protocols/patches/101-testing-timeit.patch +++ /dev/null @@ -1,102 +0,0 @@ ---- a/testing/timeit.sh -+++ b/testing/timeit.sh -@@ -1,11 +1,8 @@ - #!/bin/bash - --# "man 1 time" for details --export TIME="%U seconds" -- - add() - { -- if ! dc -e ""; then -+ if ! dc p >/dev/null 2>&1; then - echo you do not have dc, so I cannot add these numbers... - exit 1 - fi -@@ -14,7 +11,7 @@ add() - tot=0 - - while read n; do -- tot=`dc -e "$n $tot + pop" 2> /dev/null` -+ tot=`dc $n $tot + p 2> /dev/null` - done - - echo $tot seconds -@@ -34,7 +31,7 @@ extract() - - if [ ! $3 ] || [ $2 == "-h" ] || [ $2 == "--help" ]; then - echo -- echo Syntax: ./timeit.sh patternfile kernel\|userspace all\|print\|real [data_files] -+ echo Syntax: .//usr/bin/timeit.sh patternfile kernel\|userspace all\|print\|real [data_files] - echo - echo \"kernel\" uses the kernel pattern and library - echo \"userspace\" uses userspace pattern and library -@@ -72,12 +69,12 @@ echo Timing $1 - if [ $3 == "all" ]; then - echo Using all characters - if [ $2 == "kernel" ]; then -- if ! ./randchars | time $speedprog "`extract $1`" verbose; then -+ if ! ./randchars | /usr/bin/time $speedprog "`extract $1`" verbose 2>&1 >/dev/null | grep user | cut -d\ -f2; then - echo $speedprog failed. > /dev/stderr - exit 1 - fi - else -- if ! ./randchars | time $speedprog -f "$1" -v; then -+ if ! ./randchars | /usr/bin/time $speedprog -f "$1" -v 2>&1 >/dev/null | grep user | cut -d\ -f2; then - echo $speedprog failed. > /dev/stderr - exit 1 - fi -@@ -85,12 +82,12 @@ if [ $3 == "all" ]; then - elif [ $3 == "print" ]; then - echo Using only printable characters - if [ $2 == "kernel" ]; then -- if ! ./randprintable | time $speedprog "`extract $1`" verbose; then -+ if ! ./randprintable | /usr/bin/time $speedprog "`extract $1`" verbose 2>&1 >/dev/null | grep user | cut -d\ -f2; then - echo $speedprog failed. > /dev/stderr - exit 1 - fi - else -- if ! ./randprintable | time $speedprog -f "$1" -v; then -+ if ! ./randprintable | /usr/bin/time $speedprog -f "$1" -v 2>&1 >/dev/null | grep user | cut -d\ -f2; then - echo $speedprog failed. > /dev/stderr - exit 1 - fi -@@ -107,12 +104,12 @@ elif [ $3 == "real" ]; then - printf $f\\t - #echo `extract $1` - if [ $2 == "kernel" ]; then -- if ! cat $f | time $speedprog "`extract $1`" 2> /dev/stdout | tee -a tmp.$$; then -+ if ! cat $f | /usr/bin/time $speedprog "`extract $1`" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then - echo $speedprog failed. > /dev/stderr - exit 1 - fi - else -- if ! cat $f | time $speedprog -f "$1" 2> /dev/stdout | tee -a tmp.$$; then -+ if ! cat $f | /usr/bin/time $speedprog -f "$1" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then - echo $speedprog failed. > /dev/stderr - exit 1 - fi -@@ -123,12 +120,12 @@ elif [ $3 == "real" ]; then - for f in data/*; do - printf $f\\t - if [ $2 == "kernel" ]; then -- if ! cat $f | time $speedprog "`extract $1`" 2> /dev/stdout | tee -a tmp.$$; then -+ if ! cat $f | /usr/bin/time $speedprog "`extract $1`" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then - echo $speedprog failed. > /dev/stderr - exit 1 - fi - else -- if ! cat $f | time $speedprog -f "$1" 2> /dev/stdout | tee -a tmp.$$; then -+ if ! cat $f | /usr/bin/time $speedprog -f "$1" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then - echo $speedprog failed. > /dev/stderr - exit 1 - fi -@@ -137,7 +134,7 @@ elif [ $3 == "real" ]; then - fi - - printf Total:\ -- cat tmp.$$ | cut -d\ -f 2 | add -+ cat tmp.$$ | cut -ds -f 1| add - - rm tmp.$$ - else diff --git a/net/l7-protocols/patches/102-testing-doallspeeds.patch b/net/l7-protocols/patches/102-testing-doallspeeds.patch deleted file mode 100644 index 850a1d6a08..0000000000 --- a/net/l7-protocols/patches/102-testing-doallspeeds.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/testing/doallspeeds.sh -+++ b/testing/doallspeeds.sh -@@ -25,11 +25,11 @@ for f in ../*/*.pat; do - printf `basename $f .pat` - - if [ $userspace ]; then -- gtime=`./timeit.sh $f userspace real | grep Total | cut -d\ -f 2` -+ gtime=`./timeit.sh $f userspace real | grep Total | cut -d\ -f 2 | awk '{print $1}'` - printf \\t$gtime - fi - if [ $kernel ]; then -- htime=`./timeit.sh $f kernel real | grep Total | cut -d\ -f 2` -+ htime=`./timeit.sh $f kernel real | grep Total | cut -d\ -f 2 | awk '{print $1}'` - printf \\t$htime - fi - printf \\n diff --git a/net/lftp/Makefile b/net/lftp/Makefile index 6b25a3bc5f..7a4cd3685d 100644 --- a/net/lftp/Makefile +++ b/net/lftp/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=lftp PKG_VERSION:=4.8.2 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=http://lftp.tech/ftp/ \ https://mirror.csclub.uwaterloo.ca/gentoo-distfiles/distfiles/ @@ -53,7 +53,7 @@ CONFIGURE_ARGS += \ --with-zlib="$(STAGING_DIR)/usr" \ --disable-static -EXTRA_CXXFLAGS += -std=c++0x +TARGET_CXXFLAGS+= -std=c++11 define Package/lftp/install $(INSTALL_DIR) $(1)/usr/bin diff --git a/net/memcached/Makefile b/net/memcached/Makefile index 59c7554a3e..ec8869442c 100644 --- a/net/memcached/Makefile +++ b/net/memcached/Makefile @@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=memcached -PKG_VERSION:=1.5.1 +PKG_VERSION:=1.5.2 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://memcached.org/files -PKG_HASH:=a87908936b51d1bd3ef10a2347eef5647f003b63407a5d8161fa7928b1cd6b5c +PKG_HASH:=9ac93113bdb5d037e79c61277386564ac2e5e31d49e594f11e554e4c149b7245 PKG_MAINTAINER:=Thomas Heil diff --git a/net/unbound/Makefile b/net/unbound/Makefile index 8cdf46f567..b3e966c223 100644 --- a/net/unbound/Makefile +++ b/net/unbound/Makefile @@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=unbound -PKG_VERSION:=1.6.6 -PKG_RELEASE:=2 +PKG_VERSION:=1.6.7 +PKG_RELEASE:=1 PKG_LICENSE:=BSD-3-Clause PKG_LICENSE_FILES:=LICENSE @@ -17,7 +17,7 @@ PKG_MAINTAINER:=Eric Luehrsen PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://www.unbound.net/downloads -PKG_HASH:=972b14dc33093e672652a7b2b5f159bab2198b0fe9c9e1c5707e1895d4d4b390 +PKG_HASH:=4e7bd43d827004c6d51bef73adf941798e4588bdb40de5e79d89034d69751c9f PKG_BUILD_DEPENDS:=libexpat PKG_BUILD_PARALLEL:=1 diff --git a/net/unbound/patches/001-conf.patch b/net/unbound/patches/001-conf.patch index a54596eaec..01d6bb839d 100644 --- a/net/unbound/patches/001-conf.patch +++ b/net/unbound/patches/001-conf.patch @@ -6,7 +6,7 @@ index 5396029..cbb51ec 100644 -# -# Example configuration file. -# --# See unbound.conf(5) man page, version 1.6.6. +-# See unbound.conf(5) man page, version 1.6.7. -# -# this is a comment. +############################################################################## diff --git a/sound/pulseaudio/Makefile b/sound/pulseaudio/Makefile index 0b79b9936c..4b3487faa0 100644 --- a/sound/pulseaudio/Makefile +++ b/sound/pulseaudio/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=pulseaudio -PKG_VERSION:=11.0 -PKG_RELEASE:=2 +PKG_VERSION:=11.1 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_SOURCE_URL:=http://freedesktop.org/software/pulseaudio/releases/ -PKG_HASH:=072305d4018fc5e75bb1b45ee6b938fa52fc9fd27493bf327415ef89ed14c969 +PKG_SOURCE_URL:=https://freedesktop.org/software/pulseaudio/releases/ +PKG_HASH:=f2521c525a77166189e3cb9169f75c2ee2b82fa3fcf9476024fbc2c3a6c9cd9e PKG_LICENSE:=LGPL-2.1+ PKG_LICENSE_FILES:=GPL LICENSE diff --git a/utils/acpid/Makefile b/utils/acpid/Makefile index 38e4f71832..8f4972a5f7 100644 --- a/utils/acpid/Makefile +++ b/utils/acpid/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=acpid -PKG_VERSION:=2.0.27 +PKG_VERSION:=2.0.28 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@SF/acpid2 -PKG_HASH:=820c223e53cc11d9d7229fb1ffc2c2205f1054082c80f83f5a4ec4df16d3a616 +PKG_HASH:=980c3a54b0d3f2fd49fd845a0584c5c2abeaab9e9ac09fcbb68686bbb57a7110 PKG_MAINTAINER:=Thomas Heil PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:=COPYING diff --git a/utils/bash/Makefile b/utils/bash/Makefile index 88b413afb3..9978d4925e 100644 --- a/utils/bash/Makefile +++ b/utils/bash/Makefile @@ -7,15 +7,15 @@ include $(TOPDIR)/rules.mk -BASE_VERSION:=4.3 +BASE_VERSION:=4.4 PKG_NAME:=bash -PKG_VERSION:=$(BASE_VERSION).42 +PKG_VERSION:=$(BASE_VERSION).12 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(BASE_VERSION).tar.gz PKG_SOURCE_URL:=@GNU/bash -PKG_HASH:=afc687a28e0e24dc21b988fa159ff9dbcf6b7caa92ade8645cc6d5605cd024d4 +PKG_HASH:=d86b3392c1202e8ff5a423b302e6284db7f8f435ea9f39b5b1b20fd3ac36dfcb PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BASE_VERSION) PKG_LICENSE:=GPL-3.0+ diff --git a/utils/bash/patches/001-compile-fix.patch b/utils/bash/patches/001-compile-fix.patch index 7efa97b363..c3ab62364c 100644 --- a/utils/bash/patches/001-compile-fix.patch +++ b/utils/bash/patches/001-compile-fix.patch @@ -1,6 +1,8 @@ ---- a/execute_cmd.c -+++ b/execute_cmd.c -@@ -2369,7 +2369,11 @@ execute_pipeline (command, asynchronous, +Index: bash-4.4/execute_cmd.c +=================================================================== +--- bash-4.4.orig/execute_cmd.c ++++ bash-4.4/execute_cmd.c +@@ -2459,7 +2459,11 @@ execute_pipeline (command, asynchronous, /* If the `lastpipe' option is set with shopt, and job control is not enabled, execute the last element of non-async pipelines in the current shell environment. */ diff --git a/utils/bash/patches/002-force-internal-readline.patch b/utils/bash/patches/002-force-internal-readline.patch index 050e4763e1..fd0b6958f8 100644 --- a/utils/bash/patches/002-force-internal-readline.patch +++ b/utils/bash/patches/002-force-internal-readline.patch @@ -1,6 +1,8 @@ ---- a/configure -+++ b/configure -@@ -5430,8 +5430,7 @@ if test $opt_readline = yes; then +Index: bash-4.4/configure +=================================================================== +--- bash-4.4.orig/configure ++++ bash-4.4/configure +@@ -5420,8 +5420,7 @@ if test $opt_readline = yes; then # static version specified as -llibname to override the # dynamic version case "${host_os}" in @@ -10,9 +12,11 @@ esac fi else ---- a/configure.ac -+++ b/configure.ac -@@ -578,8 +578,7 @@ if test $opt_readline = yes; then +Index: bash-4.4/configure.ac +=================================================================== +--- bash-4.4.orig/configure.ac ++++ bash-4.4/configure.ac +@@ -573,8 +573,7 @@ if test $opt_readline = yes; then # static version specified as -llibname to override the # dynamic version case "${host_os}" in diff --git a/utils/bash/patches/101-upstream-bash43-001.patch b/utils/bash/patches/101-upstream-bash43-001.patch deleted file mode 100644 index 3231273af3..0000000000 --- a/utils/bash/patches/101-upstream-bash43-001.patch +++ /dev/null @@ -1,49 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-001 - -Bug-Reported-by: NBaH -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html - -Bug-Description: - -A missing check for a valid option prevented `test -R' from working. There -is another problem that causes bash to look up the wrong variable name when -processing the argument to `test -R'. - -Patch (apply with `patch -p0'): - ---- a/test.c -+++ b/test.c -@@ -646,8 +646,8 @@ unary_test (op, arg) - return (v && invisible_p (v) == 0 && var_isset (v) ? TRUE : FALSE); - - case 'R': -- v = find_variable (arg); -- return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE); -+ v = find_variable_noref (arg); -+ return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE); - } - - /* We can't actually get here, but this shuts up gcc. */ -@@ -723,6 +723,7 @@ test_unop (op) - case 'o': case 'p': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': case 'z': - case 'G': case 'L': case 'O': case 'S': case 'N': -+ case 'R': - return (1); - } - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 0 -+#define PATCHLEVEL 1 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/101-upstream-bash44-001.patch b/utils/bash/patches/101-upstream-bash44-001.patch new file mode 100644 index 0000000000..8481ed2a79 --- /dev/null +++ b/utils/bash/patches/101-upstream-bash44-001.patch @@ -0,0 +1,36 @@ +Index: bash-4.4/lib/readline/history.c +=================================================================== +--- bash-4.4.orig/lib/readline/history.c ++++ bash-4.4/lib/readline/history.c +@@ -57,6 +57,8 @@ extern int errno; + /* How big to make the_history when we first allocate it. */ + #define DEFAULT_HISTORY_INITIAL_SIZE 502 + ++#define MAX_HISTORY_INITIAL_SIZE 8192 ++ + /* The number of slots to increase the_history by. */ + #define DEFAULT_HISTORY_GROW_SIZE 50 + +@@ -307,7 +309,9 @@ add_history (string) + if (history_size == 0) + { + if (history_stifled && history_max_entries > 0) +- history_size = history_max_entries + 2; ++ history_size = (history_max_entries > MAX_HISTORY_INITIAL_SIZE) ++ ? MAX_HISTORY_INITIAL_SIZE ++ : history_max_entries + 2; + else + history_size = DEFAULT_HISTORY_INITIAL_SIZE; + the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *)); +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 0 ++#define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/102-upstream-bash43-002.patch b/utils/bash/patches/102-upstream-bash43-002.patch deleted file mode 100644 index 35421e8687..0000000000 --- a/utils/bash/patches/102-upstream-bash43-002.patch +++ /dev/null @@ -1,49 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-002 - -Bug-Reported-by: Moe Tunes -Bug-Reference-ID: <53103F49.3070100@gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html - -Bug-Description: - -A change to save state while running the DEBUG trap caused pipelines to hang -on systems which need process group synchronization while building pipelines. - -Patch (apply with `patch -p0'): - ---- a/trap.c -+++ b/trap.c -@@ -920,7 +920,8 @@ _run_trap_internal (sig, tag) - subst_assign_varlist = 0; - - #if defined (JOB_CONTROL) -- save_pipeline (1); /* XXX only provides one save level */ -+ if (sig != DEBUG_TRAP) /* run_debug_trap does this */ -+ save_pipeline (1); /* XXX only provides one save level */ - #endif - - /* If we're in a function, make sure return longjmps come here, too. */ -@@ -940,7 +941,8 @@ _run_trap_internal (sig, tag) - trap_exit_value = last_command_exit_value; - - #if defined (JOB_CONTROL) -- restore_pipeline (1); -+ if (sig != DEBUG_TRAP) /* run_debug_trap does this */ -+ restore_pipeline (1); - #endif - - subst_assign_varlist = save_subst_varlist; ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 1 -+#define PATCHLEVEL 2 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/102-upstream-bash44-002.patch b/utils/bash/patches/102-upstream-bash44-002.patch new file mode 100644 index 0000000000..c3da17a350 --- /dev/null +++ b/utils/bash/patches/102-upstream-bash44-002.patch @@ -0,0 +1,46 @@ +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 1 ++#define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.4/subst.c +=================================================================== +--- bash-4.4.orig/subst.c ++++ bash-4.4/subst.c +@@ -5931,6 +5931,7 @@ read_comsub (fd, quoted, rflag) + char *istring, buf[128], *bufp, *s; + int istring_index, istring_size, c, tflag, skip_ctlesc, skip_ctlnul; + ssize_t bufn; ++ int nullbyte; + + istring = (char *)NULL; + istring_index = istring_size = bufn = tflag = 0; +@@ -5938,6 +5939,8 @@ read_comsub (fd, quoted, rflag) + for (skip_ctlesc = skip_ctlnul = 0, s = ifs_value; s && *s; s++) + skip_ctlesc |= *s == CTLESC, skip_ctlnul |= *s == CTLNUL; + ++ nullbyte = 0; ++ + /* Read the output of the command through the pipe. This may need to be + changed to understand multibyte characters in the future. */ + while (1) +@@ -5956,7 +5959,11 @@ read_comsub (fd, quoted, rflag) + if (c == 0) + { + #if 1 +- internal_warning ("%s", _("command substitution: ignored null byte in input")); ++ if (nullbyte == 0) ++ { ++ internal_warning ("%s", _("command substitution: ignored null byte in input")); ++ nullbyte = 1; ++ } + #endif + continue; + } diff --git a/utils/bash/patches/103-upstream-bash43-003.patch b/utils/bash/patches/103-upstream-bash43-003.patch deleted file mode 100644 index 7c9e56bc2a..0000000000 --- a/utils/bash/patches/103-upstream-bash43-003.patch +++ /dev/null @@ -1,39 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-003 - -Bug-Reported-by: Anatol Pomozov -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html - -Bug-Description: - -When in callback mode, some readline commands can cause readline to seg -fault by passing invalid contexts to callback functions. - -Patch (apply with `patch -p0'): - ---- a/lib/readline/readline.c -+++ b/lib/readline/readline.c -@@ -744,7 +744,8 @@ _rl_dispatch_callback (cxt) - r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ)); - - RL_CHECK_SIGNALS (); -- if (r == 0) /* success! */ -+ /* We only treat values < 0 specially to simulate recursion. */ -+ if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */ - { - _rl_keyseq_chain_dispose (); - RL_UNSETSTATE (RL_STATE_MULTIKEY); ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 2 -+#define PATCHLEVEL 3 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/103-upstream-bash44-003.patch b/utils/bash/patches/103-upstream-bash44-003.patch new file mode 100644 index 0000000000..6d4dea3bc8 --- /dev/null +++ b/utils/bash/patches/103-upstream-bash44-003.patch @@ -0,0 +1,39 @@ +Index: bash-4.4/lib/glob/sm_loop.c +=================================================================== +--- bash-4.4.orig/lib/glob/sm_loop.c ++++ bash-4.4/lib/glob/sm_loop.c +@@ -330,6 +330,12 @@ PARSE_COLLSYM (p, vp) + for (pc = 0; p[pc]; pc++) + if (p[pc] == L('.') && p[pc+1] == L(']')) + break; ++ if (p[pc] == 0) ++ { ++ if (vp) ++ *vp = INVALID; ++ return (p + pc); ++ } + val = COLLSYM (p, pc); + if (vp) + *vp = val; +@@ -483,6 +489,9 @@ BRACKMATCH (p, test, flags) + c = *p++; + c = FOLD (c); + ++ if (c == L('\0')) ++ return ((test == L('[')) ? savep : (CHAR *)0); ++ + if ((flags & FNM_PATHNAME) && c == L('/')) + /* [/] can never match when matching a pathname. */ + return (CHAR *)0; +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 2 ++#define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/104-upstream-bash43-004.patch b/utils/bash/patches/104-upstream-bash43-004.patch deleted file mode 100644 index 40ac35fd5f..0000000000 --- a/utils/bash/patches/104-upstream-bash43-004.patch +++ /dev/null @@ -1,38 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-004 - -Bug-Reported-by: Daan van Rossum -Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu> -Bug-Reference-URL: - -Bug-Description: - -The `.' command in vi mode cannot undo multi-key commands beginning with -`c', `d', and `y' (command plus motion specifier). - -Patch (apply with `patch -p0'): - ---- a/lib/readline/readline.c -+++ b/lib/readline/readline.c -@@ -965,7 +965,7 @@ _rl_dispatch_subseq (key, map, got_subse - #if defined (VI_MODE) - if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && - key != ANYOTHERKEY && -- rl_key_sequence_length == 1 && /* XXX */ -+ _rl_dispatching_keymap == vi_movement_keymap && - _rl_vi_textmod_command (key)) - _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); - #endif ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 3 -+#define PATCHLEVEL 4 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/104-upstream-bash44-004.patch b/utils/bash/patches/104-upstream-bash44-004.patch new file mode 100644 index 0000000000..f1ebff6af7 --- /dev/null +++ b/utils/bash/patches/104-upstream-bash44-004.patch @@ -0,0 +1,66 @@ +Index: bash-4.4/jobs.c +=================================================================== +--- bash-4.4.orig/jobs.c ++++ bash-4.4/jobs.c +@@ -453,6 +453,21 @@ cleanup_the_pipeline () + discard_pipeline (disposer); + } + ++void ++discard_last_procsub_child () ++{ ++ PROCESS *disposer; ++ sigset_t set, oset; ++ ++ BLOCK_CHILD (set, oset); ++ disposer = last_procsub_child; ++ last_procsub_child = (PROCESS *)NULL; ++ UNBLOCK_CHILD (oset); ++ ++ if (disposer) ++ discard_pipeline (disposer); ++} ++ + struct pipeline_saver * + alloc_pipeline_saver () + { +Index: bash-4.4/jobs.h +=================================================================== +--- bash-4.4.orig/jobs.h ++++ bash-4.4/jobs.h +@@ -190,6 +190,7 @@ extern JOB **jobs; + extern void making_children __P((void)); + extern void stop_making_children __P((void)); + extern void cleanup_the_pipeline __P((void)); ++extern void discard_last_procsub_child __P((void)); + extern void save_pipeline __P((int)); + extern PROCESS *restore_pipeline __P((int)); + extern void start_pipeline __P((void)); +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 3 ++#define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.4/subst.c +=================================================================== +--- bash-4.4.orig/subst.c ++++ bash-4.4/subst.c +@@ -5808,10 +5808,7 @@ process_substitute (string, open_for_rea + { + #if defined (JOB_CONTROL) + if (last_procsub_child) +- { +- discard_pipeline (last_procsub_child); +- last_procsub_child = (PROCESS *)NULL; +- } ++ discard_last_procsub_child (); + last_procsub_child = restore_pipeline (0); + #endif + diff --git a/utils/bash/patches/105-upstream-bash43-005.patch b/utils/bash/patches/105-upstream-bash43-005.patch deleted file mode 100644 index 1cc5473841..0000000000 --- a/utils/bash/patches/105-upstream-bash43-005.patch +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-005 - -Bug-Reported-by: David Sines -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html - -Bug-Description: - -When in Posix mode, bash did not correctly interpret the ANSI-C-style -$'...' quoting mechanism when performing pattern substitution word -expansions within double quotes. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -3398,7 +3398,7 @@ parse_matched_pair (qc, open, close, len - within a double-quoted ${...} construct "an even number of - unescaped double-quotes or single-quotes, if any, shall occur." */ - /* This was changed in Austin Group Interp 221 */ -- if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') -+ if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') - continue; - - /* Could also check open == '`' if we want to parse grouping constructs ---- a/y.tab.c -+++ b/y.tab.c -@@ -5710,7 +5710,7 @@ parse_matched_pair (qc, open, close, len - within a double-quoted ${...} construct "an even number of - unescaped double-quotes or single-quotes, if any, shall occur." */ - /* This was changed in Austin Group Interp 221 */ -- if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') -+ if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') - continue; - - /* Could also check open == '`' if we want to parse grouping constructs ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 4 -+#define PATCHLEVEL 5 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/105-upstream-bash44-005.patch b/utils/bash/patches/105-upstream-bash44-005.patch new file mode 100644 index 0000000000..f9fb0182d9 --- /dev/null +++ b/utils/bash/patches/105-upstream-bash44-005.patch @@ -0,0 +1,29 @@ +Index: bash-4.4/builtins/evalstring.c +=================================================================== +--- bash-4.4.orig/builtins/evalstring.c ++++ bash-4.4/builtins/evalstring.c +@@ -104,12 +104,9 @@ should_suppress_fork (command) + running_trap == 0 && + *bash_input.location.string == '\0' && + command->type == cm_simple && +-#if 0 + signal_is_trapped (EXIT_TRAP) == 0 && + signal_is_trapped (ERROR_TRAP) == 0 && +-#else + any_signals_trapped () < 0 && +-#endif + command->redirects == 0 && command->value.Simple->redirects == 0 && + ((command->flags & CMD_TIME_PIPELINE) == 0) && + ((command->flags & CMD_INVERT_RETURN) == 0)); +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 4 ++#define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/106-upstream-bash43-006.patch b/utils/bash/patches/106-upstream-bash43-006.patch deleted file mode 100644 index c5f52b1d81..0000000000 --- a/utils/bash/patches/106-upstream-bash43-006.patch +++ /dev/null @@ -1,39 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-006 - -Bug-Reported-by: Eduardo A . Bustamante Lopez -Bug-Reference-ID: <20140228170013.GA16015@dualbus.me> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html - -Bug-Description: - -A shell that started with job control active but was not interactive left -the terminal in the wrong process group when exiting, causing its parent -shell to get a stop signal when it attempted to read from the terminal. - -Patch (apply with `patch -p0'): - ---- a/jobs.c -+++ b/jobs.c -@@ -4374,7 +4374,7 @@ without_job_control () - void - end_job_control () - { -- if (interactive_shell) /* XXX - should it be interactive? */ -+ if (interactive_shell || job_control) /* XXX - should it be just job_control? */ - { - terminate_stopped_jobs (); - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 5 -+#define PATCHLEVEL 6 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/106-upstream-bash44-006.patch b/utils/bash/patches/106-upstream-bash44-006.patch new file mode 100644 index 0000000000..a232bff9fe --- /dev/null +++ b/utils/bash/patches/106-upstream-bash44-006.patch @@ -0,0 +1,37 @@ +Index: bash-4.4/builtins/pushd.def +=================================================================== +--- bash-4.4.orig/builtins/pushd.def ++++ bash-4.4/builtins/pushd.def +@@ -365,7 +365,7 @@ popd_builtin (list) + break; + } + +- if (which > directory_list_offset || (directory_list_offset == 0 && which == 0)) ++ if (which > directory_list_offset || (which < -directory_list_offset) || (directory_list_offset == 0 && which == 0)) + { + pushd_error (directory_list_offset, which_word ? which_word : ""); + return (EXECUTION_FAILURE); +@@ -387,6 +387,11 @@ popd_builtin (list) + remove that directory from the list and shift the remainder + of the list into place. */ + i = (direction == '+') ? directory_list_offset - which : which; ++ if (i < 0 || i > directory_list_offset) ++ { ++ pushd_error (directory_list_offset, which_word ? which_word : ""); ++ return (EXECUTION_FAILURE); ++ } + free (pushd_directory_list[i]); + directory_list_offset--; + +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 5 ++#define PATCHLEVEL 6 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/107-upstream-bash43-007.patch b/utils/bash/patches/107-upstream-bash43-007.patch deleted file mode 100644 index 8578bd458d..0000000000 --- a/utils/bash/patches/107-upstream-bash43-007.patch +++ /dev/null @@ -1,45 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-007 - -Bug-Reported-by: geir.hauge@gmail.com -Bug-Reference-ID: <20140318093650.B181C1C5B0B@gina.itea.ntnu.no> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00095.html - -Bug-Description: - -Using compound assignments for associative arrays like - -assoc=( [x]= [y]=bar ) - -left the value corresponding to the key `x' NULL. This caused subsequent -lookups to interpret it as unset. - -Patch (apply with `patch -p0'): - ---- a/arrayfunc.c -+++ b/arrayfunc.c -@@ -597,6 +597,11 @@ assign_compound_array_list (var, nlist, - if (assoc_p (var)) - { - val = expand_assignment_string_to_string (val, 0); -+ if (val == 0) -+ { -+ val = (char *)xmalloc (1); -+ val[0] = '\0'; /* like do_assignment_internal */ -+ } - free_val = 1; - } - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 6 -+#define PATCHLEVEL 7 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/107-upstream-bash44-007.patch b/utils/bash/patches/107-upstream-bash44-007.patch new file mode 100644 index 0000000000..3e2973d771 --- /dev/null +++ b/utils/bash/patches/107-upstream-bash44-007.patch @@ -0,0 +1,100 @@ +Index: bash-4.4/bashline.c +=================================================================== +--- bash-4.4.orig/bashline.c ++++ bash-4.4/bashline.c +@@ -142,7 +142,7 @@ static int executable_completion __P((co + static rl_icppfunc_t *save_directory_hook __P((void)); + static void restore_directory_hook __P((rl_icppfunc_t)); + +-static int directory_exists __P((const char *)); ++static int directory_exists __P((const char *, int)); + + static void cleanup_expansion_error __P((void)); + static void maybe_make_readline_line __P((char *)); +@@ -3102,18 +3102,20 @@ restore_directory_hook (hookf) + rl_directory_rewrite_hook = hookf; + } + +-/* Check whether not the (dequoted) version of DIRNAME, with any trailing slash +- removed, exists. */ ++/* Check whether not DIRNAME, with any trailing slash removed, exists. If ++ SHOULD_DEQUOTE is non-zero, we dequote the directory name first. */ + static int +-directory_exists (dirname) ++directory_exists (dirname, should_dequote) + const char *dirname; ++ int should_dequote; + { + char *new_dirname; + int dirlen, r; + struct stat sb; + +- /* First, dequote the directory name */ +- new_dirname = bash_dequote_filename ((char *)dirname, rl_completion_quote_character); ++ /* We save the string and chop the trailing slash because stat/lstat behave ++ inconsistently if one is present. */ ++ new_dirname = should_dequote ? bash_dequote_filename ((char *)dirname, rl_completion_quote_character) : savestring (dirname); + dirlen = STRLEN (new_dirname); + if (new_dirname[dirlen - 1] == '/') + new_dirname[dirlen - 1] = '\0'; +@@ -3145,7 +3147,7 @@ bash_filename_stat_hook (dirname) + else if (t = mbschr (local_dirname, '`')) /* XXX */ + should_expand_dirname = '`'; + +- if (should_expand_dirname && directory_exists (local_dirname)) ++ if (should_expand_dirname && directory_exists (local_dirname, 0)) + should_expand_dirname = 0; + + if (should_expand_dirname) +@@ -3155,7 +3157,7 @@ bash_filename_stat_hook (dirname) + have to worry about restoring this setting. */ + global_nounset = unbound_vars_is_error; + unbound_vars_is_error = 0; +- wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */ ++ wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */ + unbound_vars_is_error = global_nounset; + if (wl) + { +@@ -3244,13 +3246,13 @@ bash_directory_completion_hook (dirname) + should_expand_dirname = '`'; + } + +- if (should_expand_dirname && directory_exists (local_dirname)) ++ if (should_expand_dirname && directory_exists (local_dirname, 1)) + should_expand_dirname = 0; + + if (should_expand_dirname) + { + new_dirname = savestring (local_dirname); +- wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */ ++ wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */ + if (wl) + { + *dirname = string_list (wl); +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 6 ++#define PATCHLEVEL 7 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.4/subst.c +=================================================================== +--- bash-4.4.orig/subst.c ++++ bash-4.4/subst.c +@@ -9458,6 +9458,10 @@ add_twochars: + tword->flags |= word->flags & (W_ASSIGNARG|W_ASSIGNRHS); /* affects $@ */ + if (word->flags & W_COMPLETE) + tword->flags |= W_COMPLETE; /* for command substitutions */ ++ if (word->flags & W_NOCOMSUB) ++ tword->flags |= W_NOCOMSUB; ++ if (word->flags & W_NOPROCSUB) ++ tword->flags |= W_NOPROCSUB; + + temp = (char *)NULL; + diff --git a/utils/bash/patches/108-upstream-bash43-008.patch b/utils/bash/patches/108-upstream-bash43-008.patch deleted file mode 100644 index 2402021696..0000000000 --- a/utils/bash/patches/108-upstream-bash43-008.patch +++ /dev/null @@ -1,148 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-008 - -Bug-Reported-by: Stephane Chazelas -Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html - -Bug-Description: - -Some extended glob patterns incorrectly matched filenames with a leading -dot, regardless of the setting of the `dotglob' option. - -Patch (apply with `patch -p0'): - ---- a/lib/glob/gmisc.c -+++ b/lib/glob/gmisc.c -@@ -210,6 +210,7 @@ extglob_pattern_p (pat) - case '+': - case '!': - case '@': -+ case '?': - return (pat[1] == LPAREN); - default: - return 0; ---- a/lib/glob/glob.c -+++ b/lib/glob/glob.c -@@ -179,42 +179,50 @@ extglob_skipname (pat, dname, flags) - char *pat, *dname; - int flags; - { -- char *pp, *pe, *t; -- int n, r; -+ char *pp, *pe, *t, *se; -+ int n, r, negate; - -+ negate = *pat == '!'; - pp = pat + 2; -- pe = pp + strlen (pp) - 1; /*(*/ -- if (*pe != ')') -- return 0; -- if ((t = strchr (pp, '|')) == 0) /* easy case first */ -+ se = pp + strlen (pp) - 1; /* end of string */ -+ pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ -+ /* we should check for invalid extglob pattern here */ -+ /* if pe != se we have more of the pattern at the end of the extglob -+ pattern. Check the easy case first ( */ -+ if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0) - { - *pe = '\0'; -+#if defined (HANDLE_MULTIBYTE) -+ r = mbskipname (pp, dname, flags); -+#else - r = skipname (pp, dname, flags); /*(*/ -+#endif - *pe = ')'; - return r; - } -+ -+ /* check every subpattern */ - while (t = glob_patscan (pp, pe, '|')) - { - n = t[-1]; - t[-1] = '\0'; -+#if defined (HANDLE_MULTIBYTE) -+ r = mbskipname (pp, dname, flags); -+#else - r = skipname (pp, dname, flags); -+#endif - t[-1] = n; - if (r == 0) /* if any pattern says not skip, we don't skip */ - return r; - pp = t; - } /*(*/ - -- if (pp == pe) /* glob_patscan might find end of pattern */ -+ /* glob_patscan might find end of pattern */ -+ if (pp == se) - return r; - -- *pe = '\0'; --# if defined (HANDLE_MULTIBYTE) -- r = mbskipname (pp, dname, flags); /*(*/ --# else -- r = skipname (pp, dname, flags); /*(*/ --# endif -- *pe = ')'; -- return r; -+ /* but if it doesn't then we didn't match a leading dot */ -+ return 0; - } - #endif - -@@ -277,20 +285,23 @@ wextglob_skipname (pat, dname, flags) - int flags; - { - #if EXTENDED_GLOB -- wchar_t *pp, *pe, *t, n; -- int r; -+ wchar_t *pp, *pe, *t, n, *se; -+ int r, negate; - -+ negate = *pat == L'!'; - pp = pat + 2; -- pe = pp + wcslen (pp) - 1; /*(*/ -- if (*pe != L')') -- return 0; -- if ((t = wcschr (pp, L'|')) == 0) -+ se = pp + wcslen (pp) - 1; /*(*/ -+ pe = glob_patscan_wc (pp, se, 0); -+ -+ if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0) - { - *pe = L'\0'; - r = wchkname (pp, dname); /*(*/ - *pe = L')'; - return r; - } -+ -+ /* check every subpattern */ - while (t = glob_patscan_wc (pp, pe, '|')) - { - n = t[-1]; -@@ -305,10 +316,8 @@ wextglob_skipname (pat, dname, flags) - if (pp == pe) /* glob_patscan_wc might find end of pattern */ - return r; - -- *pe = L'\0'; -- r = wchkname (pp, dname); /*(*/ -- *pe = L')'; -- return r; -+ /* but if it doesn't then we didn't match a leading dot */ -+ return 0; - #else - return (wchkname (pat, dname)); - #endif ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 7 -+#define PATCHLEVEL 8 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/108-upstream-bash44-008.patch b/utils/bash/patches/108-upstream-bash44-008.patch new file mode 100644 index 0000000000..9503b0502b --- /dev/null +++ b/utils/bash/patches/108-upstream-bash44-008.patch @@ -0,0 +1,58 @@ +Index: bash-4.4/expr.c +=================================================================== +--- bash-4.4.orig/expr.c ++++ bash-4.4/expr.c +@@ -578,24 +578,23 @@ expcond () + rval = cval = explor (); + if (curtok == QUES) /* found conditional expr */ + { +- readtok (); +- if (curtok == 0 || curtok == COL) +- evalerror (_("expression expected")); + if (cval == 0) + { + set_noeval = 1; + noeval++; + } + ++ readtok (); ++ if (curtok == 0 || curtok == COL) ++ evalerror (_("expression expected")); ++ + val1 = EXP_HIGHEST (); + + if (set_noeval) + noeval--; + if (curtok != COL) + evalerror (_("`:' expected for conditional expression")); +- readtok (); +- if (curtok == 0) +- evalerror (_("expression expected")); ++ + set_noeval = 0; + if (cval) + { +@@ -603,7 +602,11 @@ expcond () + noeval++; + } + ++ readtok (); ++ if (curtok == 0) ++ evalerror (_("expression expected")); + val2 = expcond (); ++ + if (set_noeval) + noeval--; + rval = cval ? val1 : val2; +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 7 ++#define PATCHLEVEL 8 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/109-upstream-bash43-009.patch b/utils/bash/patches/109-upstream-bash43-009.patch deleted file mode 100644 index f222bd6778..0000000000 --- a/utils/bash/patches/109-upstream-bash43-009.patch +++ /dev/null @@ -1,51 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-009 - -Bug-Reported-by: Matthias Klose -Bug-Reference-ID: <53346FC8.6090005@debian.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00171.html - -Bug-Description: - -There is a problem with unsigned sign extension when attempting to reallocate -the input line when it is fewer than 3 characters long and there has been a -history expansion. The sign extension causes the shell to not reallocate the -line, which results in a segmentation fault when it writes past the end. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -2424,7 +2424,7 @@ shell_getc (remove_quoted_newline) - not already end in an EOF character. */ - if (shell_input_line_terminator != EOF) - { -- if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3) -+ if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size)) - shell_input_line = (char *)xrealloc (shell_input_line, - 1 + (shell_input_line_size += 2)); - ---- a/y.tab.c -+++ b/y.tab.c -@@ -4736,7 +4736,7 @@ shell_getc (remove_quoted_newline) - not already end in an EOF character. */ - if (shell_input_line_terminator != EOF) - { -- if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3) -+ if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size)) - shell_input_line = (char *)xrealloc (shell_input_line, - 1 + (shell_input_line_size += 2)); - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 8 -+#define PATCHLEVEL 9 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/109-upstream-bash44-009.patch b/utils/bash/patches/109-upstream-bash44-009.patch new file mode 100644 index 0000000000..580d9a2f99 --- /dev/null +++ b/utils/bash/patches/109-upstream-bash44-009.patch @@ -0,0 +1,67 @@ +Index: bash-4.4/lib/readline/history.c +=================================================================== +--- bash-4.4.orig/lib/readline/history.c ++++ bash-4.4/lib/readline/history.c +@@ -279,6 +279,7 @@ add_history (string) + const char *string; + { + HIST_ENTRY *temp; ++ int new_length; + + if (history_stifled && (history_length == history_max_entries)) + { +@@ -295,13 +296,9 @@ add_history (string) + + /* Copy the rest of the entries, moving down one slot. Copy includes + trailing NULL. */ +-#if 0 +- for (i = 0; i < history_length; i++) +- the_history[i] = the_history[i + 1]; +-#else + memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *)); +-#endif + ++ new_length = history_length; + history_base++; + } + else +@@ -315,7 +312,7 @@ add_history (string) + else + history_size = DEFAULT_HISTORY_INITIAL_SIZE; + the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *)); +- history_length = 1; ++ new_length = 1; + } + else + { +@@ -325,14 +322,15 @@ add_history (string) + the_history = (HIST_ENTRY **) + xrealloc (the_history, history_size * sizeof (HIST_ENTRY *)); + } +- history_length++; ++ new_length = history_length + 1; + } + } + + temp = alloc_history_entry ((char *)string, hist_inittime ()); + +- the_history[history_length] = (HIST_ENTRY *)NULL; +- the_history[history_length - 1] = temp; ++ the_history[new_length] = (HIST_ENTRY *)NULL; ++ the_history[new_length - 1] = temp; ++ history_length = new_length; + } + + /* Change the time stamp of the most recent history entry to STRING. */ +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 8 ++#define PATCHLEVEL 9 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/110-upstream-bash43-010.patch b/utils/bash/patches/110-upstream-bash43-010.patch deleted file mode 100644 index 22d9f1ba2e..0000000000 --- a/utils/bash/patches/110-upstream-bash43-010.patch +++ /dev/null @@ -1,145 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-010 - -Bug-Reported-by: Albert Shih -Bug-Reference-ID: Wed, 5 Mar 2014 23:01:40 +0100 -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html - -Bug-Description: - -Patch (apply with `patch -p0'): - -This patch changes the behavior of programmable completion to compensate -for two assumptions made by the bash-completion package. Bash-4.3 changed -to dequote the argument to programmable completion only under certain -circumstances, to make the behavior of compgen more consistent when run -from the command line -- closer to the behavior when run by a shell function -run as part of programmable completion. Bash-completion can pass quoted -arguments to compgen when the original word to be completed was not quoted, -expecting programmable completion to dequote the word before attempting -completion. - -This patch fixes two cases: - -1. An empty string that bash-completion passes to compgen as a quoted null - string (''). - -2. An unquoted word that bash-completion quotes using single quotes or - backslashes before passing it to compgen. - -In these cases, since readline did not detect a quote character in the original -word to be completed, bash-4.3 - ---- a/externs.h -+++ b/externs.h -@@ -324,6 +324,7 @@ extern char *sh_un_double_quote __P((cha - extern char *sh_backslash_quote __P((char *, const char *, int)); - extern char *sh_backslash_quote_for_double_quotes __P((char *)); - extern int sh_contains_shell_metas __P((char *)); -+extern int sh_contains_quotes __P((char *)); - - /* declarations for functions defined in lib/sh/spell.c */ - extern int spname __P((char *, char *)); ---- a/lib/sh/shquote.c -+++ b/lib/sh/shquote.c -@@ -311,3 +311,17 @@ sh_contains_shell_metas (string) - - return (0); - } -+ -+int -+sh_contains_quotes (string) -+ char *string; -+{ -+ char *s; -+ -+ for (s = string; s && *s; s++) -+ { -+ if (*s == '\'' || *s == '"' || *s == '\\') -+ return 1; -+ } -+ return 0; -+} ---- a/pcomplete.c -+++ b/pcomplete.c -@@ -183,6 +183,7 @@ ITEMLIST it_variables = { LIST_DYNAMIC, - - COMPSPEC *pcomp_curcs; - const char *pcomp_curcmd; -+const char *pcomp_curtxt; - - #ifdef DEBUG - /* Debugging code */ -@@ -753,6 +754,32 @@ pcomp_filename_completion_function (text - quoted strings. */ - dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); - } -+ /* Intended to solve a mismatched assumption by bash-completion. If -+ the text to be completed is empty, but bash-completion turns it into -+ a quoted string ('') assuming that this code will dequote it before -+ calling readline, do the dequoting. */ -+ else if (iscompgen && iscompleting && -+ pcomp_curtxt && *pcomp_curtxt == 0 && -+ text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 && -+ rl_filename_dequoting_function) -+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); -+ /* Another mismatched assumption by bash-completion. If compgen is being -+ run as part of bash-completion, and the argument to compgen is not -+ the same as the word originally passed to the programmable completion -+ code, dequote the argument if it has quote characters. It's an -+ attempt to detect when bash-completion is quoting its filename -+ argument before calling compgen. */ -+ /* We could check whether gen_shell_function_matches is in the call -+ stack by checking whether the gen-shell-function-matches tag is in -+ the unwind-protect stack, but there's no function to do that yet. -+ We could simply check whether we're executing in a function by -+ checking variable_context, and may end up doing that. */ -+ else if (iscompgen && iscompleting && rl_filename_dequoting_function && -+ pcomp_curtxt && text && -+ STREQ (pcomp_curtxt, text) == 0 && -+ variable_context && -+ sh_contains_quotes (text)) /* guess */ -+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); - else - dfn = savestring (text); - } -@@ -1522,7 +1549,7 @@ gen_progcomp_completions (ocmd, cmd, wor - COMPSPEC **lastcs; - { - COMPSPEC *cs, *oldcs; -- const char *oldcmd; -+ const char *oldcmd, *oldtxt; - STRINGLIST *ret; - - cs = progcomp_search (ocmd); -@@ -1545,14 +1572,17 @@ gen_progcomp_completions (ocmd, cmd, wor - - oldcs = pcomp_curcs; - oldcmd = pcomp_curcmd; -+ oldtxt = pcomp_curtxt; - - pcomp_curcs = cs; - pcomp_curcmd = cmd; -+ pcomp_curtxt = word; - - ret = gen_compspec_completions (cs, cmd, word, start, end, foundp); - - pcomp_curcs = oldcs; - pcomp_curcmd = oldcmd; -+ pcomp_curtxt = oldtxt; - - /* We need to conditionally handle setting *retryp here */ - if (retryp) ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 9 -+#define PATCHLEVEL 10 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/110-upstream-bash44-010.patch b/utils/bash/patches/110-upstream-bash44-010.patch new file mode 100644 index 0000000000..1636b76e7a --- /dev/null +++ b/utils/bash/patches/110-upstream-bash44-010.patch @@ -0,0 +1,26 @@ +Index: bash-4.4/builtins/read.def +=================================================================== +--- bash-4.4.orig/builtins/read.def ++++ bash-4.4/builtins/read.def +@@ -181,7 +181,8 @@ read_builtin (list) + WORD_LIST *list; + { + register char *varname; +- int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; ++ int size, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; ++ volatile int i; + int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul; + int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, t_errno; + unsigned int tmsec, tmusec; +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 9 ++#define PATCHLEVEL 10 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/111-upstream-bash43-011.patch b/utils/bash/patches/111-upstream-bash43-011.patch deleted file mode 100644 index b4c181a304..0000000000 --- a/utils/bash/patches/111-upstream-bash43-011.patch +++ /dev/null @@ -1,40 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-011 - -Bug-Reported-by: Egmont Koblinger -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html - -Bug-Description: - -The signal handling changes to bash and readline (to avoid running any code -in a signal handler context) cause the cursor to be placed on the wrong -line of a multi-line command after a ^C interrupts editing. - -Patch (apply with `patch -p0'): - ---- a/lib/readline/display.c -+++ b/lib/readline/display.c -@@ -2677,7 +2677,8 @@ _rl_clean_up_for_exit () - { - if (_rl_echoing_p) - { -- _rl_move_vert (_rl_vis_botlin); -+ if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */ -+ _rl_move_vert (_rl_vis_botlin); - _rl_vis_botlin = 0; - fflush (rl_outstream); - rl_restart_output (1, 0); ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 10 -+#define PATCHLEVEL 11 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/111-upstream-bash44-011.patch b/utils/bash/patches/111-upstream-bash44-011.patch new file mode 100644 index 0000000000..b6ea030465 --- /dev/null +++ b/utils/bash/patches/111-upstream-bash44-011.patch @@ -0,0 +1,26 @@ +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 10 ++#define PATCHLEVEL 11 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.4/sig.c +=================================================================== +--- bash-4.4.orig/sig.c ++++ bash-4.4/sig.c +@@ -585,7 +585,8 @@ termsig_handler (sig) + #if defined (JOB_CONTROL) + if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)))) + hangup_all_jobs (); +- end_job_control (); ++ if ((subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)) == 0) ++ end_job_control (); + #endif /* JOB_CONTROL */ + + #if defined (PROCESS_SUBSTITUTION) diff --git a/utils/bash/patches/112-upstream-bash43-012.patch b/utils/bash/patches/112-upstream-bash43-012.patch deleted file mode 100644 index 8fd2ea6710..0000000000 --- a/utils/bash/patches/112-upstream-bash43-012.patch +++ /dev/null @@ -1,38 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-012 - -Bug-Reported-by: Eduardo A. Bustamante López -Bug-Reference-ID: <5346B54C.4070205@case.edu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00051.html - -Bug-Description: - -When a SIGCHLD trap runs a command containing a shell builtin while -a script is running `wait' to wait for all running children to complete, -the SIGCHLD trap will not be run once for each child that terminates. - -Patch (apply with `patch -p0'): - ---- a/jobs.c -+++ b/jobs.c -@@ -3597,6 +3597,7 @@ run_sigchld_trap (nchild) - unwind_protect_int (jobs_list_frozen); - unwind_protect_pointer (the_pipeline); - unwind_protect_pointer (subst_assign_varlist); -+ unwind_protect_pointer (this_shell_builtin); - - /* We have to add the commands this way because they will be run - in reverse order of adding. We don't want maybe_set_sigchld_trap () ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 11 -+#define PATCHLEVEL 12 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/112-upstream-bash44-012.patch b/utils/bash/patches/112-upstream-bash44-012.patch new file mode 100644 index 0000000000..83d239e48d --- /dev/null +++ b/utils/bash/patches/112-upstream-bash44-012.patch @@ -0,0 +1,106 @@ +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 11 ++#define PATCHLEVEL 12 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.4/subst.c +=================================================================== +--- bash-4.4.orig/subst.c ++++ bash-4.4/subst.c +@@ -2825,11 +2825,15 @@ list_string (string, separators, quoted) + + /* Parse a single word from STRING, using SEPARATORS to separate fields. + ENDPTR is set to the first character after the word. This is used by +- the `read' builtin. This is never called with SEPARATORS != $IFS; +- it should be simplified. ++ the `read' builtin. ++ ++ This is never called with SEPARATORS != $IFS, and takes advantage of that. + + XXX - this function is very similar to list_string; they should be + combined - XXX */ ++ ++#define islocalsep(c) (local_cmap[(unsigned char)(c)] != 0) ++ + char * + get_word_from_string (stringp, separators, endptr) + char **stringp, *separators, **endptr; +@@ -2837,6 +2841,7 @@ get_word_from_string (stringp, separator + register char *s; + char *current_word; + int sindex, sh_style_split, whitesep, xflags; ++ unsigned char local_cmap[UCHAR_MAX+1]; /* really only need single-byte chars here */ + size_t slen; + + if (!stringp || !*stringp || !**stringp) +@@ -2846,20 +2851,23 @@ get_word_from_string (stringp, separator + separators[1] == '\t' && + separators[2] == '\n' && + separators[3] == '\0'; +- for (xflags = 0, s = ifs_value; s && *s; s++) ++ memset (local_cmap, '\0', sizeof (local_cmap)); ++ for (xflags = 0, s = separators; s && *s; s++) + { + if (*s == CTLESC) xflags |= SX_NOCTLESC; + if (*s == CTLNUL) xflags |= SX_NOESCCTLNUL; ++ local_cmap[(unsigned char)*s] = 1; /* local charmap of separators */ + } + + s = *stringp; + slen = 0; + + /* Remove sequences of whitespace at the beginning of STRING, as +- long as those characters appear in IFS. */ +- if (sh_style_split || !separators || !*separators) ++ long as those characters appear in SEPARATORS. This happens if ++ SEPARATORS == $' \t\n' or if IFS is unset. */ ++ if (sh_style_split || separators == 0) + { +- for (; *s && spctabnl (*s) && isifs (*s); s++); ++ for (; *s && spctabnl (*s) && islocalsep (*s); s++); + + /* If the string is nothing but whitespace, update it and return. */ + if (!*s) +@@ -2878,9 +2886,9 @@ get_word_from_string (stringp, separator + + This obeys the field splitting rules in Posix.2. */ + sindex = 0; +- /* Don't need string length in ADVANCE_CHAR or string_extract_verbatim +- unless multibyte chars are possible. */ +- slen = (MB_CUR_MAX > 1) ? STRLEN (s) : 1; ++ /* Don't need string length in ADVANCE_CHAR unless multibyte chars are ++ possible, but need it in string_extract_verbatim for bounds checking */ ++ slen = STRLEN (s); + current_word = string_extract_verbatim (s, slen, &sindex, separators, xflags); + + /* Set ENDPTR to the first character after the end of the word. */ +@@ -2899,19 +2907,19 @@ get_word_from_string (stringp, separator + + /* Now skip sequences of space, tab, or newline characters if they are + in the list of separators. */ +- while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex])) ++ while (s[sindex] && spctabnl (s[sindex]) && islocalsep (s[sindex])) + sindex++; + + /* If the first separator was IFS whitespace and the current character is + a non-whitespace IFS character, it should be part of the current field + delimiter, not a separate delimiter that would result in an empty field. + Look at POSIX.2, 3.6.5, (3)(b). */ +- if (s[sindex] && whitesep && isifs (s[sindex]) && !spctabnl (s[sindex])) ++ if (s[sindex] && whitesep && islocalsep (s[sindex]) && !spctabnl (s[sindex])) + { + sindex++; + /* An IFS character that is not IFS white space, along with any adjacent + IFS white space, shall delimit a field. */ +- while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex])) ++ while (s[sindex] && spctabnl (s[sindex]) && islocalsep(s[sindex])) + sindex++; + } + diff --git a/utils/bash/patches/113-upstream-bash43-013.patch b/utils/bash/patches/113-upstream-bash43-013.patch deleted file mode 100644 index 63c6c1edf7..0000000000 --- a/utils/bash/patches/113-upstream-bash43-013.patch +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-013 - -Bug-Reported-by: -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html - -Bug-Description: - -Using reverse-i-search when horizontal scrolling is enabled does not redisplay -the entire line containing the successful search results. - -Patch (apply with `patch -p0'): ---- a/lib/readline/display.c -+++ b/lib/readline/display.c -@@ -1637,7 +1637,7 @@ update_line (old, new, current_line, oma - /* If we are changing the number of invisible characters in a line, and - the spot of first difference is before the end of the invisible chars, - lendiff needs to be adjusted. */ -- if (current_line == 0 && !_rl_horizontal_scroll_mode && -+ if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */ - current_invis_chars != visible_wrap_offset) - { - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -@@ -1825,8 +1825,13 @@ update_line (old, new, current_line, oma - else - _rl_last_c_pos += bytes_to_insert; - -+ /* XXX - we only want to do this if we are at the end of the line -+ so we move there with _rl_move_cursor_relative */ - if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) -- goto clear_rest_of_line; -+ { -+ _rl_move_cursor_relative (ne-new, new); -+ goto clear_rest_of_line; -+ } - } - } - /* Otherwise, print over the existing material. */ ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 12 -+#define PATCHLEVEL 13 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/114-upstream-bash43-014.patch b/utils/bash/patches/114-upstream-bash43-014.patch deleted file mode 100644 index 99e16b9a79..0000000000 --- a/utils/bash/patches/114-upstream-bash43-014.patch +++ /dev/null @@ -1,95 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-014 - -Bug-Reported-by: Greg Wooledge -Bug-Reference-ID: <20140418202123.GB7660@eeg.ccf.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html - -Bug-Description: - -Under certain circumstances, $@ is expanded incorrectly in contexts where -word splitting is not performed. - -Patch (apply with `patch -p0'): ---- a/subst.c -+++ b/subst.c -@@ -3248,8 +3248,10 @@ cond_expand_word (w, special) - if (w->word == 0 || w->word[0] == '\0') - return ((char *)NULL); - -+ expand_no_split_dollar_star = 1; - w->flags |= W_NOSPLIT2; - l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0); -+ expand_no_split_dollar_star = 0; - if (l) - { - if (special == 0) /* LHS */ -@@ -7847,6 +7849,10 @@ param_expand (string, sindex, quoted, ex - We also want to make sure that splitting is done no matter what -- - according to POSIX.2, this expands to a list of the positional - parameters no matter what IFS is set to. */ -+ /* XXX - what to do when in a context where word splitting is not -+ performed? Even when IFS is not the default, posix seems to imply -+ that we behave like unquoted $* ? Maybe we should use PF_NOSPLIT2 -+ here. */ - temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted); - - tflag |= W_DOLLARAT; -@@ -8816,6 +8822,7 @@ finished_with_string: - else - { - char *ifs_chars; -+ char *tstring; - - ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL; - -@@ -8830,11 +8837,36 @@ finished_with_string: - regardless of what else has happened to IFS since the expansion. */ - if (split_on_spaces) - list = list_string (istring, " ", 1); /* XXX quoted == 1? */ -+ /* If we have $@ (has_dollar_at != 0) and we are in a context where we -+ don't want to split the result (W_NOSPLIT2), and we are not quoted, -+ we have already separated the arguments with the first character of -+ $IFS. In this case, we want to return a list with a single word -+ with the separator possibly replaced with a space (it's what other -+ shells seem to do). -+ quoted_dollar_at is internal to this function and is set if we are -+ passed an argument that is unquoted (quoted == 0) but we encounter a -+ double-quoted $@ while expanding it. */ -+ else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2)) -+ { -+ /* Only split and rejoin if we have to */ -+ if (*ifs_chars && *ifs_chars != ' ') -+ { -+ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); -+ tstring = string_list (list); -+ } -+ else -+ tstring = istring; -+ tword = make_bare_word (tstring); -+ if (tstring != istring) -+ free (tstring); -+ goto set_word_flags; -+ } - else if (has_dollar_at && ifs_chars) - list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); - else - { - tword = make_bare_word (istring); -+set_word_flags: - if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED)) - tword->flags |= W_QUOTED; - if (word->flags & W_ASSIGNMENT) ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 13 -+#define PATCHLEVEL 14 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/115-upstream-bash43-015.patch b/utils/bash/patches/115-upstream-bash43-015.patch deleted file mode 100644 index ae8be2d9b5..0000000000 --- a/utils/bash/patches/115-upstream-bash43-015.patch +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-015 - -Bug-Reported-by: Clark Wang -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00095.html - -Bug-Description: - -When completing directory names, the directory name is dequoted twice. -This causes problems for directories with single and double quotes in -their names. - -Patch (apply with `patch -p0'): ---- a/bashline.c -+++ b/bashline.c -@@ -4167,9 +4167,16 @@ bash_directory_completion_matches (text) - int qc; - - qc = rl_dispatching ? rl_completion_quote_character : 0; -- dfn = bash_dequote_filename ((char *)text, qc); -+ /* If rl_completion_found_quote != 0, rl_completion_matches will call the -+ filename dequoting function, causing the directory name to be dequoted -+ twice. */ -+ if (rl_dispatching && rl_completion_found_quote == 0) -+ dfn = bash_dequote_filename ((char *)text, qc); -+ else -+ dfn = (char *)text; - m1 = rl_completion_matches (dfn, rl_filename_completion_function); -- free (dfn); -+ if (dfn != text) -+ free (dfn); - - if (m1 == 0 || m1[0] == 0) - return m1; ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 14 -+#define PATCHLEVEL 15 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/116-upstream-bash43-016.patch b/utils/bash/patches/116-upstream-bash43-016.patch deleted file mode 100644 index 3ce37f621a..0000000000 --- a/utils/bash/patches/116-upstream-bash43-016.patch +++ /dev/null @@ -1,121 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-016 - -Bug-Reported-by: Pierre Gaston -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html - -Bug-Description: - -An extended glob pattern containing a slash (`/') causes the globbing code -to misinterpret it as a directory separator. - -Patch (apply with `patch -p0'): ---- a/lib/glob/glob.c -+++ b/lib/glob/glob.c -@@ -123,6 +123,8 @@ static char **glob_dir_to_array __P((cha - extern char *glob_patscan __P((char *, char *, int)); - extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int)); - -+extern char *glob_dirscan __P((char *, int)); -+ - /* Compile `glob_loop.c' for single-byte characters. */ - #define CHAR unsigned char - #define INT int -@@ -187,6 +189,9 @@ extglob_skipname (pat, dname, flags) - se = pp + strlen (pp) - 1; /* end of string */ - pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ - /* we should check for invalid extglob pattern here */ -+ if (pe == 0) -+ return 0; -+ - /* if pe != se we have more of the pattern at the end of the extglob - pattern. Check the easy case first ( */ - if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0) -@@ -1015,7 +1020,7 @@ glob_filename (pathname, flags) - { - char **result; - unsigned int result_size; -- char *directory_name, *filename, *dname; -+ char *directory_name, *filename, *dname, *fn; - unsigned int directory_len; - int free_dirname; /* flag */ - int dflags; -@@ -1031,6 +1036,18 @@ glob_filename (pathname, flags) - - /* Find the filename. */ - filename = strrchr (pathname, '/'); -+#if defined (EXTENDED_GLOB) -+ if (filename && extended_glob) -+ { -+ fn = glob_dirscan (pathname, '/'); -+#if DEBUG_MATCHING -+ if (fn != filename) -+ fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename); -+#endif -+ filename = fn; -+ } -+#endif -+ - if (filename == NULL) - { - filename = pathname; ---- a/lib/glob/gmisc.c -+++ b/lib/glob/gmisc.c -@@ -42,6 +42,8 @@ - #define WLPAREN L'(' - #define WRPAREN L')' - -+extern char *glob_patscan __P((char *, char *, int)); -+ - /* Return 1 of the first character of WSTRING could match the first - character of pattern WPAT. Wide character version. */ - int -@@ -375,3 +377,34 @@ bad_bracket: - - return matlen; - } -+ -+/* Skip characters in PAT and return the final occurrence of DIRSEP. This -+ is only called when extended_glob is set, so we have to skip over extglob -+ patterns x(...) */ -+char * -+glob_dirscan (pat, dirsep) -+ char *pat; -+ int dirsep; -+{ -+ char *p, *d, *pe, *se; -+ -+ d = pe = se = 0; -+ for (p = pat; p && *p; p++) -+ { -+ if (extglob_pattern_p (p)) -+ { -+ if (se == 0) -+ se = p + strlen (p) - 1; -+ pe = glob_patscan (p + 2, se, 0); -+ if (pe == 0) -+ continue; -+ else if (*pe == 0) -+ break; -+ p = pe - 1; /* will do increment above */ -+ continue; -+ } -+ if (*p == dirsep) -+ d = p; -+ } -+ return d; -+} ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 15 -+#define PATCHLEVEL 16 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/117-upstream-bash43-017.patch b/utils/bash/patches/117-upstream-bash43-017.patch deleted file mode 100644 index 9c7eecc952..0000000000 --- a/utils/bash/patches/117-upstream-bash43-017.patch +++ /dev/null @@ -1,41 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-017 - -Bug-Reported-by: Dan Douglas -Bug-Reference-ID: <7781746.RhfoTROLxF@smorgbox> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00026.html - -Bug-Description: - -The code that creates local variables should not clear the `invisible' -attribute when returning an existing local variable. Let the code that -actually assigns a value clear it. - -Patch (apply with `patch -p0'): ---- a/variables.c -+++ b/variables.c -@@ -2197,10 +2197,7 @@ make_local_variable (name) - /* local foo; local foo; is a no-op. */ - old_var = find_variable (name); - if (old_var && local_p (old_var) && old_var->context == variable_context) -- { -- VUNSETATTR (old_var, att_invisible); /* XXX */ -- return (old_var); -- } -+ return (old_var); - - was_tmpvar = old_var && tempvar_p (old_var); - /* If we're making a local variable in a shell function, the temporary env ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 16 -+#define PATCHLEVEL 17 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/118-upstream-bash43-018.patch b/utils/bash/patches/118-upstream-bash43-018.patch deleted file mode 100644 index 095ca9326f..0000000000 --- a/utils/bash/patches/118-upstream-bash43-018.patch +++ /dev/null @@ -1,38 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-018 - -Bug-Reported-by: Geir Hauge -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00040.html - -Bug-Description: - -When assigning an array variable using the compound assignment syntax, -but using `declare' with the rhs of the compound assignment quoted, the -shell did not mark the variable as visible after successfully performing -the assignment. - -Patch (apply with `patch -p0'): ---- a/arrayfunc.c -+++ b/arrayfunc.c -@@ -179,6 +179,7 @@ bind_array_var_internal (entry, ind, key - array_insert (array_cell (entry), ind, newval); - FREE (newval); - -+ VUNSETATTR (entry, att_invisible); /* no longer invisible */ - return (entry); - } - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 17 -+#define PATCHLEVEL 18 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/119-upstream-bash43-019.patch b/utils/bash/patches/119-upstream-bash43-019.patch deleted file mode 100644 index 2d0fa440d6..0000000000 --- a/utils/bash/patches/119-upstream-bash43-019.patch +++ /dev/null @@ -1,75 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-019 - -Bug-Reported-by: John Lenton -Bug-Reference-ID: -Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476 - -Bug-Description: - -The -t timeout option to `read' does not work when the -e option is used. - -Patch (apply with `patch -p0'): - ---- a/lib/readline/input.c -+++ b/lib/readline/input.c -@@ -534,8 +534,16 @@ rl_getc (stream) - return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); - else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM) - return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); -+ /* keyboard-generated signals of interest */ - else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT) - RL_CHECK_SIGNALS (); -+ /* non-keyboard-generated signals of interest */ -+ else if (_rl_caught_signal == SIGALRM -+#if defined (SIGVTALRM) -+ || _rl_caught_signal == SIGVTALRM -+#endif -+ ) -+ RL_CHECK_SIGNALS (); - - if (rl_signal_event_hook) - (*rl_signal_event_hook) (); ---- a/builtins/read.def -+++ b/builtins/read.def -@@ -442,7 +442,10 @@ read_builtin (list) - add_unwind_protect (reset_alarm, (char *)NULL); - #if defined (READLINE) - if (edit) -- add_unwind_protect (reset_attempted_completion_function, (char *)NULL); -+ { -+ add_unwind_protect (reset_attempted_completion_function, (char *)NULL); -+ add_unwind_protect (bashline_reset_event_hook, (char *)NULL); -+ } - #endif - falarm (tmsec, tmusec); - } -@@ -1021,6 +1024,7 @@ edit_line (p, itext) - - old_attempted_completion_function = rl_attempted_completion_function; - rl_attempted_completion_function = (rl_completion_func_t *)NULL; -+ bashline_set_event_hook (); - if (itext) - { - old_startup_hook = rl_startup_hook; -@@ -1032,6 +1036,7 @@ edit_line (p, itext) - - rl_attempted_completion_function = old_attempted_completion_function; - old_attempted_completion_function = (rl_completion_func_t *)NULL; -+ bashline_reset_event_hook (); - - if (ret == 0) - return ret; ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 18 -+#define PATCHLEVEL 19 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/120-upstream-bash43-020.patch b/utils/bash/patches/120-upstream-bash43-020.patch deleted file mode 100644 index abf0c30189..0000000000 --- a/utils/bash/patches/120-upstream-bash43-020.patch +++ /dev/null @@ -1,93 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-020 - -Bug-Reported-by: Jared Yanovich -Bug-Reference-ID: <20140417073654.GB26875@nightderanger.psc.edu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00065.html - -Bug-Description: - -When PS2 contains a command substitution, here-documents entered in an -interactive shell can sometimes cause a segmentation fault. - -Patch (apply with `patch -p0'): - ---- a/shell.h -+++ b/shell.h -@@ -168,7 +168,8 @@ typedef struct _sh_parser_state_t { - /* flags state affecting the parser */ - int expand_aliases; - int echo_input_at_read; -- -+ int need_here_doc; -+ - } sh_parser_state_t; - - typedef struct _sh_input_line_state_t { ---- a/parse.y -+++ b/parse.y -@@ -2642,7 +2642,7 @@ gather_here_documents () - int r; - - r = 0; -- while (need_here_doc) -+ while (need_here_doc > 0) - { - parser_state |= PST_HEREDOC; - make_here_document (redir_stack[r++], line_number); -@@ -6075,6 +6075,7 @@ save_parser_state (ps) - - ps->expand_aliases = expand_aliases; - ps->echo_input_at_read = echo_input_at_read; -+ ps->need_here_doc = need_here_doc; - - ps->token = token; - ps->token_buffer_size = token_buffer_size; -@@ -6123,6 +6124,7 @@ restore_parser_state (ps) - - expand_aliases = ps->expand_aliases; - echo_input_at_read = ps->echo_input_at_read; -+ need_here_doc = ps->need_here_doc; - - FREE (token); - token = ps->token; ---- a/y.tab.c -+++ b/y.tab.c -@@ -4954,7 +4954,7 @@ gather_here_documents () - int r; - - r = 0; -- while (need_here_doc) -+ while (need_here_doc > 0) - { - parser_state |= PST_HEREDOC; - make_here_document (redir_stack[r++], line_number); -@@ -8387,6 +8387,7 @@ save_parser_state (ps) - - ps->expand_aliases = expand_aliases; - ps->echo_input_at_read = echo_input_at_read; -+ ps->need_here_doc = need_here_doc; - - ps->token = token; - ps->token_buffer_size = token_buffer_size; -@@ -8435,6 +8436,7 @@ restore_parser_state (ps) - - expand_aliases = ps->expand_aliases; - echo_input_at_read = ps->echo_input_at_read; -+ need_here_doc = ps->need_here_doc; - - FREE (token); - token = ps->token; ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 19 -+#define PATCHLEVEL 20 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/121-upstream-bash43-021.patch b/utils/bash/patches/121-upstream-bash43-021.patch deleted file mode 100644 index b7367a080e..0000000000 --- a/utils/bash/patches/121-upstream-bash43-021.patch +++ /dev/null @@ -1,46 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-021 - -Bug-Reported-by: Jared Yanovich -Bug-Reference-ID: <20140625225019.GJ17044@nightderanger.psc.edu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00070.html - -Bug-Description: - -When the readline `revert-all-at-newline' option is set, pressing newline -when the current line is one retrieved from history results in a double free -and a segmentation fault. - -Patch (apply with `patch -p0'): - ---- a/lib/readline/misc.c -+++ b/lib/readline/misc.c -@@ -461,6 +461,7 @@ _rl_revert_all_lines () - saved_undo_list = 0; - /* Set up rl_line_buffer and other variables from history entry */ - rl_replace_from_history (entry, 0); /* entry->line is now current */ -+ entry->data = 0; /* entry->data is now current undo list */ - /* Undo all changes to this history entry */ - while (rl_undo_list) - rl_do_undo (); -@@ -468,7 +469,6 @@ _rl_revert_all_lines () - the timestamp. */ - FREE (entry->line); - entry->line = savestring (rl_line_buffer); -- entry->data = 0; - } - entry = previous_history (); - } ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 20 -+#define PATCHLEVEL 21 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/122-upstream-bash43-022.patch b/utils/bash/patches/122-upstream-bash43-022.patch deleted file mode 100644 index 1ee8f13a10..0000000000 --- a/utils/bash/patches/122-upstream-bash43-022.patch +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-022 - -Bug-Reported-by: scorp.dev.null@gmail.com -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html - -Bug-Description: - -Using nested pipelines within loops with the `lastpipe' option set can result -in a segmentation fault. - -Patch (apply with `patch -p0'): - ---- a/execute_cmd.c -+++ b/execute_cmd.c -@@ -2413,7 +2413,16 @@ execute_pipeline (command, asynchronous, - #endif - lstdin = wait_for (lastpid); - #if defined (JOB_CONTROL) -- exec_result = job_exit_status (lastpipe_jid); -+ /* If wait_for removes the job from the jobs table, use result of last -+ command as pipeline's exit status as usual. The jobs list can get -+ frozen and unfrozen at inconvenient times if there are multiple pipelines -+ running simultaneously. */ -+ if (INVALID_JOB (lastpipe_jid) == 0) -+ exec_result = job_exit_status (lastpipe_jid); -+ else if (pipefail_opt) -+ exec_result = exec_result | lstdin; /* XXX */ -+ /* otherwise we use exec_result */ -+ - #endif - unfreeze_jobs_list (); - } ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 21 -+#define PATCHLEVEL 22 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/123-upstream-bash43-023.patch b/utils/bash/patches/123-upstream-bash43-023.patch deleted file mode 100644 index 8684c13724..0000000000 --- a/utils/bash/patches/123-upstream-bash43-023.patch +++ /dev/null @@ -1,78 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-023 - -Bug-Reported-by: Tim Friske -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00056.html - -Bug-Description: - -Bash does not correctly parse process substitution constructs that contain -unbalanced parentheses as part of the contained command. - -Patch (apply with `patch -p0'): - ---- a/subst.h -+++ b/subst.h -@@ -82,7 +82,7 @@ extern char *extract_arithmetic_subst __ - /* Extract the <( or >( construct in STRING, and return a new string. - Start extracting at (SINDEX) as if we had just seen "<(". - Make (SINDEX) get the position just after the matching ")". */ --extern char *extract_process_subst __P((char *, char *, int *)); -+extern char *extract_process_subst __P((char *, char *, int *, int)); - #endif /* PROCESS_SUBSTITUTION */ - - /* Extract the name of the variable to bind to from the assignment string. */ ---- a/subst.c -+++ b/subst.c -@@ -1192,12 +1192,18 @@ extract_arithmetic_subst (string, sindex - Start extracting at (SINDEX) as if we had just seen "<(". - Make (SINDEX) get the position of the matching ")". */ /*))*/ - char * --extract_process_subst (string, starter, sindex) -+extract_process_subst (string, starter, sindex, xflags) - char *string; - char *starter; - int *sindex; -+ int xflags; - { -+#if 0 - return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND)); -+#else -+ xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0); -+ return (xparse_dolparen (string, string+*sindex, sindex, xflags)); -+#endif - } - #endif /* PROCESS_SUBSTITUTION */ - -@@ -1785,7 +1791,7 @@ skip_to_delim (string, start, delims, fl - si = i + 2; - if (string[si] == '\0') - CQ_RETURN(si); -- temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si); -+ temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0); - free (temp); /* no SX_ALLOC here */ - i = si; - if (string[i] == '\0') -@@ -8249,7 +8255,7 @@ add_string: - else - t_index = sindex + 1; /* skip past both '<' and LPAREN */ - -- temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/ -+ temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/ - sindex = t_index; - - /* If the process substitution specification is `<()', we want to ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 22 -+#define PATCHLEVEL 23 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/124-upstream-bash43-024.patch b/utils/bash/patches/124-upstream-bash43-024.patch deleted file mode 100644 index 79414550a1..0000000000 --- a/utils/bash/patches/124-upstream-bash43-024.patch +++ /dev/null @@ -1,45 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-024 - -Bug-Reported-by: Corentin Peuvrel -Bug-Reference-ID: <53CE9E5D.6050203@pom-monitoring.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-07/msg00021.html - -Bug-Description: - -Indirect variable references do not work correctly if the reference -variable expands to an array reference using a subscript other than 0 -(e.g., foo='bar[1]' ; echo ${!foo}). - -Patch (apply with `patch -p0'): - ---- a/subst.c -+++ b/subst.c -@@ -7374,7 +7374,13 @@ parameter_brace_expand (string, indexp, - } - - if (want_indir) -- tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at); -+ { -+ tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at); -+ /* Turn off the W_ARRAYIND flag because there is no way for this function -+ to return the index we're supposed to be using. */ -+ if (tdesc && tdesc->flags) -+ tdesc->flags &= ~W_ARRAYIND; -+ } - else - tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind); - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 23 -+#define PATCHLEVEL 24 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/125-upstream-bash43-025.patch b/utils/bash/patches/125-upstream-bash43-025.patch deleted file mode 100644 index 6b2ef4b3e4..0000000000 --- a/utils/bash/patches/125-upstream-bash43-025.patch +++ /dev/null @@ -1,110 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-025 - -Bug-Reported-by: Stephane Chazelas -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under certain circumstances, bash will execute user code while processing the -environment for exported function definitions. - -Patch (apply with `patch -p0'): - ---- a/builtins/common.h -+++ b/builtins/common.h -@@ -33,6 +33,8 @@ - #define SEVAL_RESETLINE 0x010 - #define SEVAL_PARSEONLY 0x020 - #define SEVAL_NOLONGJMP 0x040 -+#define SEVAL_FUNCDEF 0x080 /* only allow function definitions */ -+#define SEVAL_ONECMD 0x100 /* only allow a single command */ - - /* Flags for describe_command, shared between type.def and command.def */ - #define CDESC_ALL 0x001 /* type -a */ ---- a/builtins/evalstring.c -+++ b/builtins/evalstring.c -@@ -308,6 +308,14 @@ parse_and_execute (string, from_file, fl - { - struct fd_bitmap *bitmap; - -+ if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def) -+ { -+ internal_warning ("%s: ignoring function definition attempt", from_file); -+ should_jump_to_top_level = 0; -+ last_result = last_command_exit_value = EX_BADUSAGE; -+ break; -+ } -+ - bitmap = new_fd_bitmap (FD_BITMAP_SIZE); - begin_unwind_frame ("pe_dispose"); - add_unwind_protect (dispose_fd_bitmap, bitmap); -@@ -368,6 +376,9 @@ parse_and_execute (string, from_file, fl - dispose_command (command); - dispose_fd_bitmap (bitmap); - discard_unwind_frame ("pe_dispose"); -+ -+ if (flags & SEVAL_ONECMD) -+ break; - } - } - else ---- a/variables.c -+++ b/variables.c -@@ -358,13 +358,11 @@ initialize_shell_variables (env, privmod - temp_string[char_index] = ' '; - strcpy (temp_string + char_index + 1, string); - -- if (posixly_correct == 0 || legal_identifier (name)) -- parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST); -- -- /* Ancient backwards compatibility. Old versions of bash exported -- functions like name()=() {...} */ -- if (name[char_index - 1] == ')' && name[char_index - 2] == '(') -- name[char_index - 2] = '\0'; -+ /* Don't import function names that are invalid identifiers from the -+ environment, though we still allow them to be defined as shell -+ variables. */ -+ if (legal_identifier (name)) -+ parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); - - if (temp_var = find_function (name)) - { -@@ -381,10 +379,6 @@ initialize_shell_variables (env, privmod - last_command_exit_value = 1; - report_error (_("error importing function definition for `%s'"), name); - } -- -- /* ( */ -- if (name[char_index - 1] == ')' && name[char_index - 2] == '\0') -- name[char_index - 2] = '('; /* ) */ - } - #if defined (ARRAY_VARS) - # if ARRAY_EXPORT ---- a/subst.c -+++ b/subst.c -@@ -8047,7 +8047,9 @@ comsub: - - goto return0; - } -- else if (var = find_variable_last_nameref (temp1)) -+ else if (var && (invisible_p (var) || var_isset (var) == 0)) -+ temp = (char *)NULL; -+ else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0) - { - temp = nameref_cell (var); - #if defined (ARRAY_VARS) ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 24 -+#define PATCHLEVEL 25 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/126-upstream-bash43-026.patch b/utils/bash/patches/126-upstream-bash43-026.patch deleted file mode 100644 index e9535bebb4..0000000000 --- a/utils/bash/patches/126-upstream-bash43-026.patch +++ /dev/null @@ -1,54 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-026 - -Bug-Reported-by: Tavis Ormandy -Bug-Reference-ID: -Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929 - -Bug-Description: - -Under certain circumstances, bash can incorrectly save a lookahead character and -return it on a subsequent call, even when reading a new line. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -2953,6 +2953,8 @@ reset_parser () - FREE (word_desc_to_read); - word_desc_to_read = (WORD_DESC *)NULL; - -+ eol_ungetc_lookahead = 0; -+ - current_token = '\n'; /* XXX */ - last_read_token = '\n'; - token_to_read = '\n'; ---- a/y.tab.c -+++ b/y.tab.c -@@ -5265,6 +5265,8 @@ reset_parser () - FREE (word_desc_to_read); - word_desc_to_read = (WORD_DESC *)NULL; - -+ eol_ungetc_lookahead = 0; -+ - current_token = '\n'; /* XXX */ - last_read_token = '\n'; - token_to_read = '\n'; -@@ -8539,4 +8541,3 @@ set_line_mbstate () - } - } - #endif /* HANDLE_MULTIBYTE */ -- ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 25 -+#define PATCHLEVEL 26 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/127-upstream-bash43-027.patch b/utils/bash/patches/127-upstream-bash43-027.patch deleted file mode 100644 index 6e8a51a206..0000000000 --- a/utils/bash/patches/127-upstream-bash43-027.patch +++ /dev/null @@ -1,176 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-027 - -Bug-Reported-by: Florian Weimer -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -This patch changes the encoding bash uses for exported functions to avoid -clashes with shell variables and to avoid depending only on an environment -variable's contents to determine whether or not to interpret it as a shell -function. - -Patch (apply with `patch -p0'): - ---- a/variables.c -+++ b/variables.c -@@ -83,6 +83,11 @@ - - #define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0') - -+#define BASHFUNC_PREFIX "BASH_FUNC_" -+#define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */ -+#define BASHFUNC_SUFFIX "%%" -+#define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */ -+ - extern char **environ; - - /* Variables used here and defined in other files. */ -@@ -279,7 +284,7 @@ static void push_temp_var __P((PTR_T)); - static void propagate_temp_var __P((PTR_T)); - static void dispose_temporary_env __P((sh_free_func_t *)); - --static inline char *mk_env_string __P((const char *, const char *)); -+static inline char *mk_env_string __P((const char *, const char *, int)); - static char **make_env_array_from_var_list __P((SHELL_VAR **)); - static char **make_var_export_array __P((VAR_CONTEXT *)); - static char **make_func_export_array __P((void)); -@@ -349,22 +354,33 @@ initialize_shell_variables (env, privmod - - /* If exported function, define it now. Don't import functions from - the environment in privileged mode. */ -- if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4)) -+ if (privmode == 0 && read_but_dont_execute == 0 && -+ STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) && -+ STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) && -+ STREQN ("() {", string, 4)) - { -+ size_t namelen; -+ char *tname; /* desired imported function name */ -+ -+ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN; -+ -+ tname = name + BASHFUNC_PREFLEN; /* start of func name */ -+ tname[namelen] = '\0'; /* now tname == func name */ -+ - string_length = strlen (string); -- temp_string = (char *)xmalloc (3 + string_length + char_index); -+ temp_string = (char *)xmalloc (namelen + string_length + 2); - -- strcpy (temp_string, name); -- temp_string[char_index] = ' '; -- strcpy (temp_string + char_index + 1, string); -+ memcpy (temp_string, tname, namelen); -+ temp_string[namelen] = ' '; -+ memcpy (temp_string + namelen + 1, string, string_length + 1); - - /* Don't import function names that are invalid identifiers from the - environment, though we still allow them to be defined as shell - variables. */ -- if (legal_identifier (name)) -- parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); -+ if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname))) -+ parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); - -- if (temp_var = find_function (name)) -+ if (temp_var = find_function (tname)) - { - VSETATTR (temp_var, (att_exported|att_imported)); - array_needs_making = 1; -@@ -377,8 +393,11 @@ initialize_shell_variables (env, privmod - array_needs_making = 1; - } - last_command_exit_value = 1; -- report_error (_("error importing function definition for `%s'"), name); -+ report_error (_("error importing function definition for `%s'"), tname); - } -+ -+ /* Restore original suffix */ -+ tname[namelen] = BASHFUNC_SUFFIX[0]; - } - #if defined (ARRAY_VARS) - # if ARRAY_EXPORT -@@ -2954,7 +2973,7 @@ assign_in_env (word, flags) - var->context = variable_context; /* XXX */ - - INVALIDATE_EXPORTSTR (var); -- var->exportstr = mk_env_string (name, value); -+ var->exportstr = mk_env_string (name, value, 0); - - array_needs_making = 1; - -@@ -3852,21 +3871,42 @@ merge_temporary_env () - /* **************************************************************** */ - - static inline char * --mk_env_string (name, value) -+mk_env_string (name, value, isfunc) - const char *name, *value; -+ int isfunc; - { -- int name_len, value_len; -- char *p; -+ size_t name_len, value_len; -+ char *p, *q; - - name_len = strlen (name); - value_len = STRLEN (value); -- p = (char *)xmalloc (2 + name_len + value_len); -- strcpy (p, name); -- p[name_len] = '='; -+ -+ /* If we are exporting a shell function, construct the encoded function -+ name. */ -+ if (isfunc && value) -+ { -+ p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2); -+ q = p; -+ memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN); -+ q += BASHFUNC_PREFLEN; -+ memcpy (q, name, name_len); -+ q += name_len; -+ memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN); -+ q += BASHFUNC_SUFFLEN; -+ } -+ else -+ { -+ p = (char *)xmalloc (2 + name_len + value_len); -+ memcpy (p, name, name_len); -+ q = p + name_len; -+ } -+ -+ q[0] = '='; - if (value && *value) -- strcpy (p + name_len + 1, value); -+ memcpy (q + 1, value, value_len + 1); - else -- p[name_len + 1] = '\0'; -+ q[1] = '\0'; -+ - return (p); - } - -@@ -3952,7 +3992,7 @@ make_env_array_from_var_list (vars) - /* Gee, I'd like to get away with not using savestring() if we're - using the cached exportstr... */ - list[list_index] = USE_EXPORTSTR ? savestring (value) -- : mk_env_string (var->name, value); -+ : mk_env_string (var->name, value, function_p (var)); - - if (USE_EXPORTSTR == 0) - SAVE_EXPORTSTR (var, list[list_index]); ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 26 -+#define PATCHLEVEL 27 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/128-upstream-bash43-028.patch b/utils/bash/patches/128-upstream-bash43-028.patch deleted file mode 100644 index b4b1b6dcc6..0000000000 --- a/utils/bash/patches/128-upstream-bash43-028.patch +++ /dev/null @@ -1,1526 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-028 - -Bug-Reported-by: Florian Weimer -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -There are two local buffer overflows in parse.y that can cause the shell -to dump core when given many here-documents attached to a single command -or many nested loops. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -168,6 +168,9 @@ static char *read_a_line __P((int)); - - static int reserved_word_acceptable __P((int)); - static int yylex __P((void)); -+ -+static void push_heredoc __P((REDIRECT *)); -+static char *mk_alexpansion __P((char *)); - static int alias_expand_token __P((char *)); - static int time_command_acceptable __P((void)); - static int special_case_tokens __P((char *)); -@@ -265,7 +268,9 @@ int parser_state; - - /* Variables to manage the task of reading here documents, because we need to - defer the reading until after a complete command has been collected. */ --static REDIRECT *redir_stack[10]; -+#define HEREDOC_MAX 16 -+ -+static REDIRECT *redir_stack[HEREDOC_MAX]; - int need_here_doc; - - /* Where shell input comes from. History expansion is performed on each -@@ -307,7 +312,7 @@ static int global_extglob; - or `for WORD' begins. This is a nested command maximum, since the array - index is decremented after a case, select, or for command is parsed. */ - #define MAX_CASE_NEST 128 --static int word_lineno[MAX_CASE_NEST]; -+static int word_lineno[MAX_CASE_NEST+1]; - static int word_top = -1; - - /* If non-zero, it is the token that we want read_token to return -@@ -520,42 +525,42 @@ redirection: '>' WORD - source.dest = 0; - redir.filename = $2; - $$ = make_redirection (source, r_reading_until, redir, 0); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | NUMBER LESS_LESS WORD - { - source.dest = $1; - redir.filename = $3; - $$ = make_redirection (source, r_reading_until, redir, 0); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | REDIR_WORD LESS_LESS WORD - { - source.filename = $1; - redir.filename = $3; - $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | LESS_LESS_MINUS WORD - { - source.dest = 0; - redir.filename = $2; - $$ = make_redirection (source, r_deblank_reading_until, redir, 0); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | NUMBER LESS_LESS_MINUS WORD - { - source.dest = $1; - redir.filename = $3; - $$ = make_redirection (source, r_deblank_reading_until, redir, 0); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | REDIR_WORD LESS_LESS_MINUS WORD - { - source.filename = $1; - redir.filename = $3; - $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | LESS_LESS_LESS WORD - { -@@ -2636,6 +2641,21 @@ yylex () - which allow ESAC to be the next one read. */ - static int esacs_needed_count; - -+static void -+push_heredoc (r) -+ REDIRECT *r; -+{ -+ if (need_here_doc >= HEREDOC_MAX) -+ { -+ last_command_exit_value = EX_BADUSAGE; -+ need_here_doc = 0; -+ report_syntax_error (_("maximum here-document count exceeded")); -+ reset_parser (); -+ exit_shell (last_command_exit_value); -+ } -+ redir_stack[need_here_doc++] = r; -+} -+ - void - gather_here_documents () - { ---- a/y.tab.c -+++ b/y.tab.c -@@ -168,7 +168,7 @@ - - - /* Copy the first part of user declarations. */ --#line 21 "/usr/homes/chet/src/bash/src/parse.y" -+#line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - - #include "config.h" - -@@ -319,6 +319,9 @@ static char *read_a_line __P((int)); - - static int reserved_word_acceptable __P((int)); - static int yylex __P((void)); -+ -+static void push_heredoc __P((REDIRECT *)); -+static char *mk_alexpansion __P((char *)); - static int alias_expand_token __P((char *)); - static int time_command_acceptable __P((void)); - static int special_case_tokens __P((char *)); -@@ -416,7 +419,9 @@ int parser_state; - - /* Variables to manage the task of reading here documents, because we need to - defer the reading until after a complete command has been collected. */ --static REDIRECT *redir_stack[10]; -+#define HEREDOC_MAX 16 -+ -+static REDIRECT *redir_stack[HEREDOC_MAX]; - int need_here_doc; - - /* Where shell input comes from. History expansion is performed on each -@@ -458,7 +463,7 @@ static int global_extglob; - or `for WORD' begins. This is a nested command maximum, since the array - index is decremented after a case, select, or for command is parsed. */ - #define MAX_CASE_NEST 128 --static int word_lineno[MAX_CASE_NEST]; -+static int word_lineno[MAX_CASE_NEST+1]; - static int word_top = -1; - - /* If non-zero, it is the token that we want read_token to return -@@ -492,7 +497,7 @@ static REDIRECTEE redir; - - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - typedef union YYSTYPE --#line 324 "/usr/homes/chet/src/bash/src/parse.y" -+#line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - WORD_DESC *word; /* the word that we read. */ - int number; /* the number that we read. */ -@@ -503,7 +508,7 @@ typedef union YYSTYPE - PATTERN_LIST *pattern; - } - /* Line 193 of yacc.c. */ --#line 507 "y.tab.c" -+#line 512 "y.tab.c" - YYSTYPE; - # define yystype YYSTYPE /* obsolescent; will be withdrawn */ - # define YYSTYPE_IS_DECLARED 1 -@@ -516,7 +521,7 @@ typedef union YYSTYPE - - - /* Line 216 of yacc.c. */ --#line 520 "y.tab.c" -+#line 525 "y.tab.c" - - #ifdef short - # undef short -@@ -886,23 +891,23 @@ static const yytype_int8 yyrhs[] = - /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ - static const yytype_uint16 yyrline[] = - { -- 0, 377, 377, 388, 397, 412, 422, 424, 428, 434, -- 440, 446, 452, 458, 464, 470, 476, 482, 488, 494, -- 500, 506, 512, 518, 525, 532, 539, 546, 553, 560, -- 566, 572, 578, 584, 590, 596, 602, 608, 614, 620, -- 626, 632, 638, 644, 650, 656, 662, 668, 674, 680, -- 686, 692, 700, 702, 704, 708, 712, 723, 725, 729, -- 731, 733, 749, 751, 755, 757, 759, 761, 763, 765, -- 767, 769, 771, 773, 775, 779, 784, 789, 794, 799, -- 804, 809, 814, 821, 826, 831, 836, 843, 848, 853, -- 858, 863, 868, 875, 880, 885, 892, 895, 898, 902, -- 904, 935, 942, 947, 964, 969, 986, 993, 995, 997, -- 1002, 1006, 1010, 1014, 1016, 1018, 1022, 1023, 1027, 1029, -- 1031, 1033, 1037, 1039, 1041, 1043, 1045, 1047, 1051, 1053, -- 1062, 1070, 1071, 1077, 1078, 1085, 1089, 1091, 1093, 1100, -- 1102, 1104, 1108, 1109, 1112, 1114, 1116, 1120, 1121, 1130, -- 1143, 1159, 1174, 1176, 1178, 1185, 1188, 1192, 1194, 1200, -- 1206, 1223, 1243, 1245, 1268, 1272, 1274, 1276 -+ 0, 382, 382, 393, 402, 417, 427, 429, 433, 439, -+ 445, 451, 457, 463, 469, 475, 481, 487, 493, 499, -+ 505, 511, 517, 523, 530, 537, 544, 551, 558, 565, -+ 571, 577, 583, 589, 595, 601, 607, 613, 619, 625, -+ 631, 637, 643, 649, 655, 661, 667, 673, 679, 685, -+ 691, 697, 705, 707, 709, 713, 717, 728, 730, 734, -+ 736, 738, 754, 756, 760, 762, 764, 766, 768, 770, -+ 772, 774, 776, 778, 780, 784, 789, 794, 799, 804, -+ 809, 814, 819, 826, 831, 836, 841, 848, 853, 858, -+ 863, 868, 873, 880, 885, 890, 897, 900, 903, 907, -+ 909, 940, 947, 952, 969, 974, 991, 998, 1000, 1002, -+ 1007, 1011, 1015, 1019, 1021, 1023, 1027, 1028, 1032, 1034, -+ 1036, 1038, 1042, 1044, 1046, 1048, 1050, 1052, 1056, 1058, -+ 1067, 1075, 1076, 1082, 1083, 1090, 1094, 1096, 1098, 1105, -+ 1107, 1109, 1113, 1114, 1117, 1119, 1121, 1125, 1126, 1135, -+ 1148, 1164, 1179, 1181, 1183, 1190, 1193, 1197, 1199, 1205, -+ 1211, 1228, 1248, 1250, 1273, 1277, 1279, 1281 - }; - #endif - -@@ -2093,7 +2098,7 @@ yyreduce: - switch (yyn) - { - case 2: --#line 378 "/usr/homes/chet/src/bash/src/parse.y" -+#line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - /* Case of regular command. Discard the error - safety net,and return the command just parsed. */ -@@ -2107,7 +2112,7 @@ yyreduce: - break; - - case 3: --#line 389 "/usr/homes/chet/src/bash/src/parse.y" -+#line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - /* Case of regular command, but not a very - interesting one. Return a NULL command. */ -@@ -2119,7 +2124,7 @@ yyreduce: - break; - - case 4: --#line 398 "/usr/homes/chet/src/bash/src/parse.y" -+#line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - /* Error during parsing. Return NULL command. */ - global_command = (COMMAND *)NULL; -@@ -2137,7 +2142,7 @@ yyreduce: - break; - - case 5: --#line 413 "/usr/homes/chet/src/bash/src/parse.y" -+#line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - /* Case of EOF seen by itself. Do ignoreeof or - not. */ -@@ -2148,17 +2153,17 @@ yyreduce: - break; - - case 6: --#line 423 "/usr/homes/chet/src/bash/src/parse.y" -+#line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); } - break; - - case 7: --#line 425 "/usr/homes/chet/src/bash/src/parse.y" -+#line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); } - break; - - case 8: --#line 429 "/usr/homes/chet/src/bash/src/parse.y" -+#line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2167,7 +2172,7 @@ yyreduce: - break; - - case 9: --#line 435 "/usr/homes/chet/src/bash/src/parse.y" -+#line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2176,7 +2181,7 @@ yyreduce: - break; - - case 10: --#line 441 "/usr/homes/chet/src/bash/src/parse.y" -+#line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2185,7 +2190,7 @@ yyreduce: - break; - - case 11: --#line 447 "/usr/homes/chet/src/bash/src/parse.y" -+#line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2194,7 +2199,7 @@ yyreduce: - break; - - case 12: --#line 453 "/usr/homes/chet/src/bash/src/parse.y" -+#line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2203,7 +2208,7 @@ yyreduce: - break; - - case 13: --#line 459 "/usr/homes/chet/src/bash/src/parse.y" -+#line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2212,7 +2217,7 @@ yyreduce: - break; - - case 14: --#line 465 "/usr/homes/chet/src/bash/src/parse.y" -+#line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2221,7 +2226,7 @@ yyreduce: - break; - - case 15: --#line 471 "/usr/homes/chet/src/bash/src/parse.y" -+#line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2230,7 +2235,7 @@ yyreduce: - break; - - case 16: --#line 477 "/usr/homes/chet/src/bash/src/parse.y" -+#line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2239,7 +2244,7 @@ yyreduce: - break; - - case 17: --#line 483 "/usr/homes/chet/src/bash/src/parse.y" -+#line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2248,7 +2253,7 @@ yyreduce: - break; - - case 18: --#line 489 "/usr/homes/chet/src/bash/src/parse.y" -+#line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2257,7 +2262,7 @@ yyreduce: - break; - - case 19: --#line 495 "/usr/homes/chet/src/bash/src/parse.y" -+#line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2266,7 +2271,7 @@ yyreduce: - break; - - case 20: --#line 501 "/usr/homes/chet/src/bash/src/parse.y" -+#line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2275,7 +2280,7 @@ yyreduce: - break; - - case 21: --#line 507 "/usr/homes/chet/src/bash/src/parse.y" -+#line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2284,7 +2289,7 @@ yyreduce: - break; - - case 22: --#line 513 "/usr/homes/chet/src/bash/src/parse.y" -+#line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2293,67 +2298,67 @@ yyreduce: - break; - - case 23: --#line 519 "/usr/homes/chet/src/bash/src/parse.y" -+#line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); - (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 24: --#line 526 "/usr/homes/chet/src/bash/src/parse.y" -+#line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); - (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 25: --#line 533 "/usr/homes/chet/src/bash/src/parse.y" -+#line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); - (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 26: --#line 540 "/usr/homes/chet/src/bash/src/parse.y" -+#line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); - (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 27: --#line 547 "/usr/homes/chet/src/bash/src/parse.y" -+#line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); - (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 28: --#line 554 "/usr/homes/chet/src/bash/src/parse.y" -+#line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); - (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 29: --#line 561 "/usr/homes/chet/src/bash/src/parse.y" -+#line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2362,7 +2367,7 @@ yyreduce: - break; - - case 30: --#line 567 "/usr/homes/chet/src/bash/src/parse.y" -+#line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2371,7 +2376,7 @@ yyreduce: - break; - - case 31: --#line 573 "/usr/homes/chet/src/bash/src/parse.y" -+#line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2380,7 +2385,7 @@ yyreduce: - break; - - case 32: --#line 579 "/usr/homes/chet/src/bash/src/parse.y" -+#line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.dest = (yyvsp[(2) - (2)].number); -@@ -2389,7 +2394,7 @@ yyreduce: - break; - - case 33: --#line 585 "/usr/homes/chet/src/bash/src/parse.y" -+#line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2398,7 +2403,7 @@ yyreduce: - break; - - case 34: --#line 591 "/usr/homes/chet/src/bash/src/parse.y" -+#line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2407,7 +2412,7 @@ yyreduce: - break; - - case 35: --#line 597 "/usr/homes/chet/src/bash/src/parse.y" -+#line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.dest = (yyvsp[(2) - (2)].number); -@@ -2416,7 +2421,7 @@ yyreduce: - break; - - case 36: --#line 603 "/usr/homes/chet/src/bash/src/parse.y" -+#line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2425,7 +2430,7 @@ yyreduce: - break; - - case 37: --#line 609 "/usr/homes/chet/src/bash/src/parse.y" -+#line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2434,7 +2439,7 @@ yyreduce: - break; - - case 38: --#line 615 "/usr/homes/chet/src/bash/src/parse.y" -+#line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2443,7 +2448,7 @@ yyreduce: - break; - - case 39: --#line 621 "/usr/homes/chet/src/bash/src/parse.y" -+#line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2452,7 +2457,7 @@ yyreduce: - break; - - case 40: --#line 627 "/usr/homes/chet/src/bash/src/parse.y" -+#line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2461,7 +2466,7 @@ yyreduce: - break; - - case 41: --#line 633 "/usr/homes/chet/src/bash/src/parse.y" -+#line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2470,7 +2475,7 @@ yyreduce: - break; - - case 42: --#line 639 "/usr/homes/chet/src/bash/src/parse.y" -+#line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2479,7 +2484,7 @@ yyreduce: - break; - - case 43: --#line 645 "/usr/homes/chet/src/bash/src/parse.y" -+#line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2488,7 +2493,7 @@ yyreduce: - break; - - case 44: --#line 651 "/usr/homes/chet/src/bash/src/parse.y" -+#line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.dest = 0; -@@ -2497,7 +2502,7 @@ yyreduce: - break; - - case 45: --#line 657 "/usr/homes/chet/src/bash/src/parse.y" -+#line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = 0; -@@ -2506,7 +2511,7 @@ yyreduce: - break; - - case 46: --#line 663 "/usr/homes/chet/src/bash/src/parse.y" -+#line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = 0; -@@ -2515,7 +2520,7 @@ yyreduce: - break; - - case 47: --#line 669 "/usr/homes/chet/src/bash/src/parse.y" -+#line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.dest = 0; -@@ -2524,7 +2529,7 @@ yyreduce: - break; - - case 48: --#line 675 "/usr/homes/chet/src/bash/src/parse.y" -+#line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = 0; -@@ -2533,7 +2538,7 @@ yyreduce: - break; - - case 49: --#line 681 "/usr/homes/chet/src/bash/src/parse.y" -+#line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = 0; -@@ -2542,7 +2547,7 @@ yyreduce: - break; - - case 50: --#line 687 "/usr/homes/chet/src/bash/src/parse.y" -+#line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2551,7 +2556,7 @@ yyreduce: - break; - - case 51: --#line 693 "/usr/homes/chet/src/bash/src/parse.y" -+#line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2560,29 +2565,29 @@ yyreduce: - break; - - case 52: --#line 701 "/usr/homes/chet/src/bash/src/parse.y" -+#line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; } - break; - - case 53: --#line 703 "/usr/homes/chet/src/bash/src/parse.y" -+#line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; } - break; - - case 54: --#line 705 "/usr/homes/chet/src/bash/src/parse.y" -+#line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; } - break; - - case 55: --#line 709 "/usr/homes/chet/src/bash/src/parse.y" -+#line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.redirect) = (yyvsp[(1) - (1)].redirect); - } - break; - - case 56: --#line 713 "/usr/homes/chet/src/bash/src/parse.y" -+#line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - register REDIRECT *t; - -@@ -2594,27 +2599,27 @@ yyreduce: - break; - - case 57: --#line 724 "/usr/homes/chet/src/bash/src/parse.y" -+#line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); } - break; - - case 58: --#line 726 "/usr/homes/chet/src/bash/src/parse.y" -+#line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); } - break; - - case 59: --#line 730 "/usr/homes/chet/src/bash/src/parse.y" -+#line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); } - break; - - case 60: --#line 732 "/usr/homes/chet/src/bash/src/parse.y" -+#line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 61: --#line 734 "/usr/homes/chet/src/bash/src/parse.y" -+#line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - COMMAND *tc; - -@@ -2633,72 +2638,72 @@ yyreduce: - break; - - case 62: --#line 750 "/usr/homes/chet/src/bash/src/parse.y" -+#line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 63: --#line 752 "/usr/homes/chet/src/bash/src/parse.y" -+#line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 64: --#line 756 "/usr/homes/chet/src/bash/src/parse.y" -+#line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 65: --#line 758 "/usr/homes/chet/src/bash/src/parse.y" -+#line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 66: --#line 760 "/usr/homes/chet/src/bash/src/parse.y" -+#line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); } - break; - - case 67: --#line 762 "/usr/homes/chet/src/bash/src/parse.y" -+#line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); } - break; - - case 68: --#line 764 "/usr/homes/chet/src/bash/src/parse.y" -+#line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 69: --#line 766 "/usr/homes/chet/src/bash/src/parse.y" -+#line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 70: --#line 768 "/usr/homes/chet/src/bash/src/parse.y" -+#line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 71: --#line 770 "/usr/homes/chet/src/bash/src/parse.y" -+#line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 72: --#line 772 "/usr/homes/chet/src/bash/src/parse.y" -+#line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 73: --#line 774 "/usr/homes/chet/src/bash/src/parse.y" -+#line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 74: --#line 776 "/usr/homes/chet/src/bash/src/parse.y" -+#line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 75: --#line 780 "/usr/homes/chet/src/bash/src/parse.y" -+#line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2706,7 +2711,7 @@ yyreduce: - break; - - case 76: --#line 785 "/usr/homes/chet/src/bash/src/parse.y" -+#line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2714,7 +2719,7 @@ yyreduce: - break; - - case 77: --#line 790 "/usr/homes/chet/src/bash/src/parse.y" -+#line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2722,7 +2727,7 @@ yyreduce: - break; - - case 78: --#line 795 "/usr/homes/chet/src/bash/src/parse.y" -+#line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2730,7 +2735,7 @@ yyreduce: - break; - - case 79: --#line 800 "/usr/homes/chet/src/bash/src/parse.y" -+#line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2738,7 +2743,7 @@ yyreduce: - break; - - case 80: --#line 805 "/usr/homes/chet/src/bash/src/parse.y" -+#line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2746,7 +2751,7 @@ yyreduce: - break; - - case 81: --#line 810 "/usr/homes/chet/src/bash/src/parse.y" -+#line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2754,7 +2759,7 @@ yyreduce: - break; - - case 82: --#line 815 "/usr/homes/chet/src/bash/src/parse.y" -+#line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2762,7 +2767,7 @@ yyreduce: - break; - - case 83: --#line 822 "/usr/homes/chet/src/bash/src/parse.y" -+#line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2770,7 +2775,7 @@ yyreduce: - break; - - case 84: --#line 827 "/usr/homes/chet/src/bash/src/parse.y" -+#line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2778,7 +2783,7 @@ yyreduce: - break; - - case 85: --#line 832 "/usr/homes/chet/src/bash/src/parse.y" -+#line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2786,7 +2791,7 @@ yyreduce: - break; - - case 86: --#line 837 "/usr/homes/chet/src/bash/src/parse.y" -+#line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2794,7 +2799,7 @@ yyreduce: - break; - - case 87: --#line 844 "/usr/homes/chet/src/bash/src/parse.y" -+#line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2802,7 +2807,7 @@ yyreduce: - break; - - case 88: --#line 849 "/usr/homes/chet/src/bash/src/parse.y" -+#line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2810,7 +2815,7 @@ yyreduce: - break; - - case 89: --#line 854 "/usr/homes/chet/src/bash/src/parse.y" -+#line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2818,7 +2823,7 @@ yyreduce: - break; - - case 90: --#line 859 "/usr/homes/chet/src/bash/src/parse.y" -+#line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2826,7 +2831,7 @@ yyreduce: - break; - - case 91: --#line 864 "/usr/homes/chet/src/bash/src/parse.y" -+#line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2834,7 +2839,7 @@ yyreduce: - break; - - case 92: --#line 869 "/usr/homes/chet/src/bash/src/parse.y" -+#line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2842,7 +2847,7 @@ yyreduce: - break; - - case 93: --#line 876 "/usr/homes/chet/src/bash/src/parse.y" -+#line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2850,7 +2855,7 @@ yyreduce: - break; - - case 94: --#line 881 "/usr/homes/chet/src/bash/src/parse.y" -+#line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2858,7 +2863,7 @@ yyreduce: - break; - - case 95: --#line 886 "/usr/homes/chet/src/bash/src/parse.y" -+#line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2866,27 +2871,27 @@ yyreduce: - break; - - case 96: --#line 893 "/usr/homes/chet/src/bash/src/parse.y" -+#line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); } - break; - - case 97: --#line 896 "/usr/homes/chet/src/bash/src/parse.y" -+#line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); } - break; - - case 98: --#line 899 "/usr/homes/chet/src/bash/src/parse.y" -+#line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); } - break; - - case 99: --#line 903 "/usr/homes/chet/src/bash/src/parse.y" -+#line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 100: --#line 905 "/usr/homes/chet/src/bash/src/parse.y" -+#line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - COMMAND *tc; - -@@ -2918,7 +2923,7 @@ yyreduce: - break; - - case 101: --#line 936 "/usr/homes/chet/src/bash/src/parse.y" -+#line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL; -@@ -2926,7 +2931,7 @@ yyreduce: - break; - - case 102: --#line 943 "/usr/homes/chet/src/bash/src/parse.y" -+#line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2934,7 +2939,7 @@ yyreduce: - break; - - case 103: --#line 948 "/usr/homes/chet/src/bash/src/parse.y" -+#line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - COMMAND *tc; - -@@ -2954,7 +2959,7 @@ yyreduce: - break; - - case 104: --#line 965 "/usr/homes/chet/src/bash/src/parse.y" -+#line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2962,7 +2967,7 @@ yyreduce: - break; - - case 105: --#line 970 "/usr/homes/chet/src/bash/src/parse.y" -+#line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - COMMAND *tc; - -@@ -2982,7 +2987,7 @@ yyreduce: - break; - - case 106: --#line 987 "/usr/homes/chet/src/bash/src/parse.y" -+#line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command))); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2990,117 +2995,117 @@ yyreduce: - break; - - case 107: --#line 994 "/usr/homes/chet/src/bash/src/parse.y" -+#line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); } - break; - - case 108: --#line 996 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); } - break; - - case 109: --#line 998 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); } - break; - - case 110: --#line 1003 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); } - break; - - case 111: --#line 1007 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); } - break; - - case 112: --#line 1011 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(2) - (3)].command); } - break; - - case 113: --#line 1015 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); } - break; - - case 114: --#line 1017 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); } - break; - - case 115: --#line 1019 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); } - break; - - case 117: --#line 1024 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); } - break; - - case 118: --#line 1028 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); } - break; - - case 119: --#line 1030 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); } - break; - - case 120: --#line 1032 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); } - break; - - case 121: --#line 1034 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); } - break; - - case 122: --#line 1038 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 123: --#line 1040 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 124: --#line 1042 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 125: --#line 1044 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 126: --#line 1046 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 127: --#line 1048 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 128: --#line 1052 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); } - break; - - case 129: --#line 1054 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); } - break; - - case 130: --#line 1063 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = (yyvsp[(2) - (2)].command); - if (need_here_doc) -@@ -3109,14 +3114,14 @@ yyreduce: - break; - - case 132: --#line 1072 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = (yyvsp[(2) - (2)].command); - } - break; - - case 134: --#line 1079 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(1) - (3)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (COMMAND *)NULL, '&'); -@@ -3126,17 +3131,17 @@ yyreduce: - break; - - case 136: --#line 1090 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); } - break; - - case 137: --#line 1092 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); } - break; - - case 138: --#line 1094 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(1) - (4)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '&'); -@@ -3146,37 +3151,37 @@ yyreduce: - break; - - case 139: --#line 1101 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); } - break; - - case 140: --#line 1103 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); } - break; - - case 141: --#line 1105 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 144: --#line 1113 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = '\n'; } - break; - - case 145: --#line 1115 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = ';'; } - break; - - case 146: --#line 1117 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = yacc_EOF; } - break; - - case 149: --#line 1131 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = (yyvsp[(1) - (1)].command); - if (need_here_doc) -@@ -3192,7 +3197,7 @@ yyreduce: - break; - - case 150: --#line 1144 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(1) - (2)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (2)].command), (COMMAND *)NULL, '&'); -@@ -3211,7 +3216,7 @@ yyreduce: - break; - - case 151: --#line 1160 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = (yyvsp[(1) - (2)].command); - if (need_here_doc) -@@ -3227,17 +3232,17 @@ yyreduce: - break; - - case 152: --#line 1175 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); } - break; - - case 153: --#line 1177 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); } - break; - - case 154: --#line 1179 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(1) - (3)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), '&'); -@@ -3247,22 +3252,22 @@ yyreduce: - break; - - case 155: --#line 1186 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); } - break; - - case 156: --#line 1189 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 157: --#line 1193 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 158: --#line 1195 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(2) - (2)].command)) - (yyvsp[(2) - (2)].command)->flags ^= CMD_INVERT_RETURN; /* toggle */ -@@ -3271,7 +3276,7 @@ yyreduce: - break; - - case 159: --#line 1201 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(2) - (2)].command)) - (yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number); -@@ -3280,7 +3285,7 @@ yyreduce: - break; - - case 160: --#line 1207 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - ELEMENT x; - -@@ -3300,7 +3305,7 @@ yyreduce: - break; - - case 161: --#line 1224 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - ELEMENT x; - -@@ -3321,12 +3326,12 @@ yyreduce: - break; - - case 162: --#line 1244 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); } - break; - - case 163: --#line 1246 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */ - COMMAND *tc; -@@ -3352,28 +3357,28 @@ yyreduce: - break; - - case 164: --#line 1269 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 165: --#line 1273 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE; } - break; - - case 166: --#line 1275 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } - break; - - case 167: --#line 1277 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } - break; - - - /* Line 1267 of yacc.c. */ --#line 3377 "y.tab.c" -+#line 3382 "y.tab.c" - default: break; - } - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); -@@ -3587,7 +3592,7 @@ yyreturn: - } - - --#line 1279 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - - - /* Initial size to allocate for tokens, and the -@@ -4948,6 +4953,21 @@ yylex () - which allow ESAC to be the next one read. */ - static int esacs_needed_count; - -+static void -+push_heredoc (r) -+ REDIRECT *r; -+{ -+ if (need_here_doc >= HEREDOC_MAX) -+ { -+ last_command_exit_value = EX_BADUSAGE; -+ need_here_doc = 0; -+ report_syntax_error (_("maximum here-document count exceeded")); -+ reset_parser (); -+ exit_shell (last_command_exit_value); -+ } -+ redir_stack[need_here_doc++] = r; -+} -+ - void - gather_here_documents () - { -@@ -8541,3 +8561,4 @@ set_line_mbstate () - } - } - #endif /* HANDLE_MULTIBYTE */ -+ ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 27 -+#define PATCHLEVEL 28 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/129-upstream-bash43-029.patch b/utils/bash/patches/129-upstream-bash43-029.patch deleted file mode 100644 index be82403491..0000000000 --- a/utils/bash/patches/129-upstream-bash43-029.patch +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-029 - -Bug-Reported-by: Michal Zalewski -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -When bash is parsing a function definition that contains a here-document -delimited by end-of-file (or end-of-string), it leaves the closing delimiter -uninitialized. This can result in an invalid memory access when the parsed -function is later copied. - -Patch (apply with `patch -p0'): - ---- a/make_cmd.c -+++ b/make_cmd.c -@@ -692,6 +692,7 @@ make_redirection (source, instruction, d - /* First do the common cases. */ - temp->redirector = source; - temp->redirectee = dest_and_filename; -+ temp->here_doc_eof = 0; - temp->instruction = instruction; - temp->flags = 0; - temp->rflags = flags; ---- a/copy_cmd.c -+++ b/copy_cmd.c -@@ -126,7 +126,7 @@ copy_redirect (redirect) - { - case r_reading_until: - case r_deblank_reading_until: -- new_redirect->here_doc_eof = savestring (redirect->here_doc_eof); -+ new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0; - /*FALLTHROUGH*/ - case r_reading_string: - case r_appending_to: ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 28 -+#define PATCHLEVEL 29 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/130-upstream-bash43-030.patch b/utils/bash/patches/130-upstream-bash43-030.patch deleted file mode 100644 index 0eadc5c077..0000000000 --- a/utils/bash/patches/130-upstream-bash43-030.patch +++ /dev/null @@ -1,1396 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-030 - -Bug-Reported-by: Michal Zalewski -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -A combination of nested command substitutions and function importing from -the environment can cause bash to execute code appearing in the environment -variable value following the function definition. - -Patch (apply with `patch -p0'): - ---- a/builtins/evalstring.c -+++ b/builtins/evalstring.c -@@ -308,12 +308,25 @@ parse_and_execute (string, from_file, fl - { - struct fd_bitmap *bitmap; - -- if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def) -+ if (flags & SEVAL_FUNCDEF) - { -- internal_warning ("%s: ignoring function definition attempt", from_file); -- should_jump_to_top_level = 0; -- last_result = last_command_exit_value = EX_BADUSAGE; -- break; -+ char *x; -+ -+ /* If the command parses to something other than a straight -+ function definition, or if we have not consumed the entire -+ string, or if the parser has transformed the function -+ name (as parsing will if it begins or ends with shell -+ whitespace, for example), reject the attempt */ -+ if (command->type != cm_function_def || -+ ((x = parser_remaining_input ()) && *x) || -+ (STREQ (from_file, command->value.Function_def->name->word) == 0)) -+ { -+ internal_warning (_("%s: ignoring function definition attempt"), from_file); -+ should_jump_to_top_level = 0; -+ last_result = last_command_exit_value = EX_BADUSAGE; -+ reset_parser (); -+ break; -+ } - } - - bitmap = new_fd_bitmap (FD_BITMAP_SIZE); -@@ -378,7 +391,10 @@ parse_and_execute (string, from_file, fl - discard_unwind_frame ("pe_dispose"); - - if (flags & SEVAL_ONECMD) -- break; -+ { -+ reset_parser (); -+ break; -+ } - } - } - else ---- a/parse.y -+++ b/parse.y -@@ -2538,6 +2538,16 @@ shell_ungetc (c) - eol_ungetc_lookahead = c; - } - -+char * -+parser_remaining_input () -+{ -+ if (shell_input_line == 0) -+ return 0; -+ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len) -+ return '\0'; /* XXX */ -+ return (shell_input_line + shell_input_line_index); -+} -+ - #ifdef INCLUDE_UNUSED - /* Back the input pointer up by one, effectively `ungetting' a character. */ - static void -@@ -4027,8 +4037,8 @@ xparse_dolparen (base, string, indp, fla - reset_parser (); - /* reset_parser clears shell_input_line and associated variables */ - restore_input_line_state (&ls); -- if (interactive) -- token_to_read = 0; -+ -+ token_to_read = 0; - - /* Need to find how many characters parse_and_execute consumed, update - *indp, if flags != 0, copy the portion of the string parsed into RET ---- a/shell.h -+++ b/shell.h -@@ -180,6 +180,8 @@ typedef struct _sh_input_line_state_t { - } sh_input_line_state_t; - - /* Let's try declaring these here. */ -+extern char *parser_remaining_input __P((void)); -+ - extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *)); - extern void restore_parser_state __P((sh_parser_state_t *)); - ---- a/y.tab.c -+++ b/y.tab.c -@@ -168,7 +168,7 @@ - - - /* Copy the first part of user declarations. */ --#line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 21 "/usr/src/local/bash/bash-4.3-patched/parse.y" - - #include "config.h" - -@@ -497,7 +497,7 @@ static REDIRECTEE redir; - - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - typedef union YYSTYPE --#line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 329 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - WORD_DESC *word; /* the word that we read. */ - int number; /* the number that we read. */ -@@ -2098,7 +2098,7 @@ yyreduce: - switch (yyn) - { - case 2: --#line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 383 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - /* Case of regular command. Discard the error - safety net,and return the command just parsed. */ -@@ -2112,7 +2112,7 @@ yyreduce: - break; - - case 3: --#line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 394 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - /* Case of regular command, but not a very - interesting one. Return a NULL command. */ -@@ -2124,7 +2124,7 @@ yyreduce: - break; - - case 4: --#line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 403 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - /* Error during parsing. Return NULL command. */ - global_command = (COMMAND *)NULL; -@@ -2142,7 +2142,7 @@ yyreduce: - break; - - case 5: --#line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 418 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - /* Case of EOF seen by itself. Do ignoreeof or - not. */ -@@ -2153,17 +2153,17 @@ yyreduce: - break; - - case 6: --#line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 428 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); } - break; - - case 7: --#line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 430 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); } - break; - - case 8: --#line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 434 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2172,7 +2172,7 @@ yyreduce: - break; - - case 9: --#line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 440 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2181,7 +2181,7 @@ yyreduce: - break; - - case 10: --#line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 446 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2190,7 +2190,7 @@ yyreduce: - break; - - case 11: --#line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 452 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2199,7 +2199,7 @@ yyreduce: - break; - - case 12: --#line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 458 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2208,7 +2208,7 @@ yyreduce: - break; - - case 13: --#line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 464 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2217,7 +2217,7 @@ yyreduce: - break; - - case 14: --#line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 470 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2226,7 +2226,7 @@ yyreduce: - break; - - case 15: --#line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 476 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2235,7 +2235,7 @@ yyreduce: - break; - - case 16: --#line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 482 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2244,7 +2244,7 @@ yyreduce: - break; - - case 17: --#line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 488 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2253,7 +2253,7 @@ yyreduce: - break; - - case 18: --#line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 494 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2262,7 +2262,7 @@ yyreduce: - break; - - case 19: --#line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 500 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2271,7 +2271,7 @@ yyreduce: - break; - - case 20: --#line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 506 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2280,7 +2280,7 @@ yyreduce: - break; - - case 21: --#line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 512 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2289,7 +2289,7 @@ yyreduce: - break; - - case 22: --#line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 518 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2298,7 +2298,7 @@ yyreduce: - break; - - case 23: --#line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 524 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2308,7 +2308,7 @@ yyreduce: - break; - - case 24: --#line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 531 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2318,7 +2318,7 @@ yyreduce: - break; - - case 25: --#line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 538 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2328,7 +2328,7 @@ yyreduce: - break; - - case 26: --#line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 545 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2338,7 +2338,7 @@ yyreduce: - break; - - case 27: --#line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 552 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2348,7 +2348,7 @@ yyreduce: - break; - - case 28: --#line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 559 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2358,7 +2358,7 @@ yyreduce: - break; - - case 29: --#line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 566 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2367,7 +2367,7 @@ yyreduce: - break; - - case 30: --#line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 572 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2376,7 +2376,7 @@ yyreduce: - break; - - case 31: --#line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 578 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2385,7 +2385,7 @@ yyreduce: - break; - - case 32: --#line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 584 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.dest = (yyvsp[(2) - (2)].number); -@@ -2394,7 +2394,7 @@ yyreduce: - break; - - case 33: --#line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 590 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2403,7 +2403,7 @@ yyreduce: - break; - - case 34: --#line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 596 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2412,7 +2412,7 @@ yyreduce: - break; - - case 35: --#line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 602 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.dest = (yyvsp[(2) - (2)].number); -@@ -2421,7 +2421,7 @@ yyreduce: - break; - - case 36: --#line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 608 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2430,7 +2430,7 @@ yyreduce: - break; - - case 37: --#line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 614 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2439,7 +2439,7 @@ yyreduce: - break; - - case 38: --#line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 620 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2448,7 +2448,7 @@ yyreduce: - break; - - case 39: --#line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 626 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2457,7 +2457,7 @@ yyreduce: - break; - - case 40: --#line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 632 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2466,7 +2466,7 @@ yyreduce: - break; - - case 41: --#line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 638 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2475,7 +2475,7 @@ yyreduce: - break; - - case 42: --#line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 644 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2484,7 +2484,7 @@ yyreduce: - break; - - case 43: --#line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 650 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2493,7 +2493,7 @@ yyreduce: - break; - - case 44: --#line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 656 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.dest = 0; -@@ -2502,7 +2502,7 @@ yyreduce: - break; - - case 45: --#line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 662 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = 0; -@@ -2511,7 +2511,7 @@ yyreduce: - break; - - case 46: --#line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 668 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = 0; -@@ -2520,7 +2520,7 @@ yyreduce: - break; - - case 47: --#line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 674 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.dest = 0; -@@ -2529,7 +2529,7 @@ yyreduce: - break; - - case 48: --#line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 680 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = 0; -@@ -2538,7 +2538,7 @@ yyreduce: - break; - - case 49: --#line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 686 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = 0; -@@ -2547,7 +2547,7 @@ yyreduce: - break; - - case 50: --#line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 692 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2556,7 +2556,7 @@ yyreduce: - break; - - case 51: --#line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 698 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2565,29 +2565,29 @@ yyreduce: - break; - - case 52: --#line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 706 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; } - break; - - case 53: --#line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 708 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; } - break; - - case 54: --#line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 710 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; } - break; - - case 55: --#line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 714 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.redirect) = (yyvsp[(1) - (1)].redirect); - } - break; - - case 56: --#line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 718 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - register REDIRECT *t; - -@@ -2599,27 +2599,27 @@ yyreduce: - break; - - case 57: --#line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 729 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); } - break; - - case 58: --#line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 731 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); } - break; - - case 59: --#line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 735 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); } - break; - - case 60: --#line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 737 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 61: --#line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 739 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - COMMAND *tc; - -@@ -2638,72 +2638,72 @@ yyreduce: - break; - - case 62: --#line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 755 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 63: --#line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 757 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 64: --#line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 761 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 65: --#line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 763 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 66: --#line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 765 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); } - break; - - case 67: --#line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 767 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); } - break; - - case 68: --#line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 769 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 69: --#line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 771 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 70: --#line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 773 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 71: --#line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 775 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 72: --#line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 777 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 73: --#line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 779 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 74: --#line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 781 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 75: --#line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 785 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2711,7 +2711,7 @@ yyreduce: - break; - - case 76: --#line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 790 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2719,7 +2719,7 @@ yyreduce: - break; - - case 77: --#line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 795 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2727,7 +2727,7 @@ yyreduce: - break; - - case 78: --#line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 800 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2735,7 +2735,7 @@ yyreduce: - break; - - case 79: --#line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 805 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2743,7 +2743,7 @@ yyreduce: - break; - - case 80: --#line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 810 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2751,7 +2751,7 @@ yyreduce: - break; - - case 81: --#line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 815 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2759,7 +2759,7 @@ yyreduce: - break; - - case 82: --#line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 820 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2767,7 +2767,7 @@ yyreduce: - break; - - case 83: --#line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 827 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2775,7 +2775,7 @@ yyreduce: - break; - - case 84: --#line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 832 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2783,7 +2783,7 @@ yyreduce: - break; - - case 85: --#line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 837 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2791,7 +2791,7 @@ yyreduce: - break; - - case 86: --#line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 842 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2799,7 +2799,7 @@ yyreduce: - break; - - case 87: --#line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 849 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2807,7 +2807,7 @@ yyreduce: - break; - - case 88: --#line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 854 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2815,7 +2815,7 @@ yyreduce: - break; - - case 89: --#line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 859 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2823,7 +2823,7 @@ yyreduce: - break; - - case 90: --#line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 864 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2831,7 +2831,7 @@ yyreduce: - break; - - case 91: --#line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 869 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2839,7 +2839,7 @@ yyreduce: - break; - - case 92: --#line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 874 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2847,7 +2847,7 @@ yyreduce: - break; - - case 93: --#line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 881 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2855,7 +2855,7 @@ yyreduce: - break; - - case 94: --#line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 886 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2863,7 +2863,7 @@ yyreduce: - break; - - case 95: --#line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 891 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2871,27 +2871,27 @@ yyreduce: - break; - - case 96: --#line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 898 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); } - break; - - case 97: --#line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 901 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); } - break; - - case 98: --#line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 904 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); } - break; - - case 99: --#line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 908 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 100: --#line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 910 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - COMMAND *tc; - -@@ -2923,7 +2923,7 @@ yyreduce: - break; - - case 101: --#line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 941 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL; -@@ -2931,7 +2931,7 @@ yyreduce: - break; - - case 102: --#line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 948 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2939,7 +2939,7 @@ yyreduce: - break; - - case 103: --#line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 953 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - COMMAND *tc; - -@@ -2959,7 +2959,7 @@ yyreduce: - break; - - case 104: --#line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 970 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2967,7 +2967,7 @@ yyreduce: - break; - - case 105: --#line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 975 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - COMMAND *tc; - -@@ -2987,7 +2987,7 @@ yyreduce: - break; - - case 106: --#line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 992 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command))); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2995,117 +2995,117 @@ yyreduce: - break; - - case 107: --#line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 999 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); } - break; - - case 108: --#line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1001 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); } - break; - - case 109: --#line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1003 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); } - break; - - case 110: --#line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1008 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); } - break; - - case 111: --#line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1012 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); } - break; - - case 112: --#line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1016 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(2) - (3)].command); } - break; - - case 113: --#line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1020 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); } - break; - - case 114: --#line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1022 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); } - break; - - case 115: --#line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1024 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); } - break; - - case 117: --#line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1029 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); } - break; - - case 118: --#line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1033 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); } - break; - - case 119: --#line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1035 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); } - break; - - case 120: --#line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1037 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); } - break; - - case 121: --#line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1039 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); } - break; - - case 122: --#line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1043 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 123: --#line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1045 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 124: --#line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1047 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 125: --#line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1049 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 126: --#line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1051 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 127: --#line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1053 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 128: --#line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1057 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); } - break; - - case 129: --#line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1059 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); } - break; - - case 130: --#line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1068 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = (yyvsp[(2) - (2)].command); - if (need_here_doc) -@@ -3114,14 +3114,14 @@ yyreduce: - break; - - case 132: --#line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1077 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = (yyvsp[(2) - (2)].command); - } - break; - - case 134: --#line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1084 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(1) - (3)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (COMMAND *)NULL, '&'); -@@ -3131,17 +3131,17 @@ yyreduce: - break; - - case 136: --#line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1095 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); } - break; - - case 137: --#line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1097 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); } - break; - - case 138: --#line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1099 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(1) - (4)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '&'); -@@ -3151,37 +3151,37 @@ yyreduce: - break; - - case 139: --#line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1106 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); } - break; - - case 140: --#line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1108 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); } - break; - - case 141: --#line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1110 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 144: --#line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1118 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = '\n'; } - break; - - case 145: --#line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1120 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = ';'; } - break; - - case 146: --#line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1122 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = yacc_EOF; } - break; - - case 149: --#line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1136 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = (yyvsp[(1) - (1)].command); - if (need_here_doc) -@@ -3197,7 +3197,7 @@ yyreduce: - break; - - case 150: --#line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1149 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(1) - (2)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (2)].command), (COMMAND *)NULL, '&'); -@@ -3216,7 +3216,7 @@ yyreduce: - break; - - case 151: --#line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1165 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = (yyvsp[(1) - (2)].command); - if (need_here_doc) -@@ -3232,17 +3232,17 @@ yyreduce: - break; - - case 152: --#line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1180 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); } - break; - - case 153: --#line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1182 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); } - break; - - case 154: --#line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1184 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(1) - (3)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), '&'); -@@ -3252,22 +3252,22 @@ yyreduce: - break; - - case 155: --#line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1191 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); } - break; - - case 156: --#line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1194 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 157: --#line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1198 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 158: --#line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1200 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(2) - (2)].command)) - (yyvsp[(2) - (2)].command)->flags ^= CMD_INVERT_RETURN; /* toggle */ -@@ -3276,7 +3276,7 @@ yyreduce: - break; - - case 159: --#line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1206 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(2) - (2)].command)) - (yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number); -@@ -3285,7 +3285,7 @@ yyreduce: - break; - - case 160: --#line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1212 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - ELEMENT x; - -@@ -3305,7 +3305,7 @@ yyreduce: - break; - - case 161: --#line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1229 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - ELEMENT x; - -@@ -3326,12 +3326,12 @@ yyreduce: - break; - - case 162: --#line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1249 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); } - break; - - case 163: --#line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1251 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */ - COMMAND *tc; -@@ -3357,22 +3357,22 @@ yyreduce: - break; - - case 164: --#line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1274 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 165: --#line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1278 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE; } - break; - - case 166: --#line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1280 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } - break; - - case 167: --#line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1282 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } - break; - -@@ -3592,7 +3592,7 @@ yyreturn: - } - - --#line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1284 "/usr/src/local/bash/bash-4.3-patched/parse.y" - - - /* Initial size to allocate for tokens, and the -@@ -4850,6 +4850,16 @@ shell_ungetc (c) - eol_ungetc_lookahead = c; - } - -+char * -+parser_remaining_input () -+{ -+ if (shell_input_line == 0) -+ return 0; -+ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len) -+ return '\0'; /* XXX */ -+ return (shell_input_line + shell_input_line_index); -+} -+ - #ifdef INCLUDE_UNUSED - /* Back the input pointer up by one, effectively `ungetting' a character. */ - static void -@@ -6339,8 +6349,8 @@ xparse_dolparen (base, string, indp, fla - reset_parser (); - /* reset_parser clears shell_input_line and associated variables */ - restore_input_line_state (&ls); -- if (interactive) -- token_to_read = 0; -+ -+ token_to_read = 0; - - /* Need to find how many characters parse_and_execute consumed, update - *indp, if flags != 0, copy the portion of the string parsed into RET ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 29 -+#define PATCHLEVEL 30 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/131-upstream-bash43-031.patch b/utils/bash/patches/131-upstream-bash43-031.patch deleted file mode 100644 index a22cb07165..0000000000 --- a/utils/bash/patches/131-upstream-bash43-031.patch +++ /dev/null @@ -1,96 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-031 - -Bug-Reported-by: lolilolicon -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00139.html - -Bug-Description: - -The new nameref assignment functionality introduced in bash-4.3 did not perform -enough validation on the variable value and would create variables with -invalid names. - -Patch (apply with `patch -p0'): - ---- a/subst.h -+++ b/subst.h -@@ -47,6 +47,7 @@ - #define ASS_MKASSOC 0x0004 - #define ASS_MKGLOBAL 0x0008 /* force global assignment */ - #define ASS_NAMEREF 0x0010 /* assigning to nameref variable */ -+#define ASS_FROMREF 0x0020 /* assigning from value of nameref variable */ - - /* Flags for the string extraction functions. */ - #define SX_NOALLOC 0x0001 /* just skip; don't return substring */ ---- a/variables.c -+++ b/variables.c -@@ -2516,10 +2516,27 @@ bind_variable_internal (name, value, tab - HASH_TABLE *table; - int hflags, aflags; - { -- char *newval; -+ char *newname, *newval; - SHELL_VAR *entry; -+#if defined (ARRAY_VARS) -+ arrayind_t ind; -+ char *subp; -+ int sublen; -+#endif - -+ newname = 0; -+#if defined (ARRAY_VARS) -+ if ((aflags & ASS_FROMREF) && (hflags & HASH_NOSRCH) == 0 && valid_array_reference (name)) -+ { -+ newname = array_variable_name (name, &subp, &sublen); -+ if (newname == 0) -+ return (SHELL_VAR *)NULL; /* XXX */ -+ entry = hash_lookup (newname, table); -+ } -+ else -+#endif - entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table); -+ - /* Follow the nameref chain here if this is the global variables table */ - if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table) - { -@@ -2550,6 +2567,16 @@ bind_variable_internal (name, value, tab - var_setvalue (entry, make_variable_value (entry, value, 0)); - } - } -+#if defined (ARRAY_VARS) -+ else if (entry == 0 && newname) -+ { -+ entry = make_new_array_variable (newname); /* indexed array by default */ -+ if (entry == 0) -+ return entry; -+ ind = array_expand_index (name, subp, sublen); -+ bind_array_element (entry, ind, value, aflags); -+ } -+#endif - else if (entry == 0) - { - entry = make_new_variable (name, table); -@@ -2670,7 +2697,8 @@ bind_variable (name, value, flags) - normal. */ - if (nameref_cell (nv) == 0) - return (bind_variable_internal (nv->name, value, nvc->table, 0, flags)); -- return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags)); -+ /* XXX - bug here with ref=array[index] */ -+ return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags|ASS_FROMREF)); - } - else - v = nv; ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 30 -+#define PATCHLEVEL 31 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/132-upstream-bash43-032.patch b/utils/bash/patches/132-upstream-bash43-032.patch deleted file mode 100644 index 96a86c9872..0000000000 --- a/utils/bash/patches/132-upstream-bash43-032.patch +++ /dev/null @@ -1,42 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-032 - -Bug-Reported-by: crispusfairbairn@gmail.com -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00013.html - -Bug-Description: - -When bash is running in Posix mode, it allows signals -- including SIGCHLD -- -to interrupt the `wait' builtin, as Posix requires. However, the interrupt -causes bash to not run a SIGCHLD trap for all exited children. This patch -fixes the issue and restores the documented behavior in Posix mode. - -Patch (apply with `patch -p0'): - ---- a/jobs.c -+++ b/jobs.c -@@ -3339,7 +3339,9 @@ itrace("waitchld: waitpid returns %d blo - if (posixly_correct && this_shell_builtin && this_shell_builtin == wait_builtin) - { - interrupt_immediately = 0; -- trap_handler (SIGCHLD); /* set pending_traps[SIGCHLD] */ -+ /* This was trap_handler (SIGCHLD) but that can lose traps if -+ children_exited > 1 */ -+ queue_sigchld_trap (children_exited); - wait_signal_received = SIGCHLD; - /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up; - run_pending_traps will call run_sigchld_trap later */ ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 31 -+#define PATCHLEVEL 32 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/133-upstream-bash43-033.patch b/utils/bash/patches/133-upstream-bash43-033.patch deleted file mode 100644 index 6210b5ea0d..0000000000 --- a/utils/bash/patches/133-upstream-bash43-033.patch +++ /dev/null @@ -1,201 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-033 - -Bug-Reported-by: mickael9@gmail.com, Jan Rome -Bug-Reference-ID: <20140907224046.382ED3610CC@mickael-laptop.localdomain>, - <540D661D.50908@gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00029.html - http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00030.html - -Bug-Description: - -Bash does not clean up the terminal state in all cases where bash or -readline modifies it and bash is subsequently terminated by a fatal signal. -This happens when the `read' builtin modifies the terminal settings, both -when readline is active and when it is not. It occurs most often when a script -installs a trap that exits on a signal without re-sending the signal to itself. - -Patch (apply with `patch -p0'): - ---- a/shell.c -+++ b/shell.c -@@ -73,6 +73,7 @@ - #endif - - #if defined (READLINE) -+# include - # include "bashline.h" - #endif - -@@ -909,6 +910,14 @@ exit_shell (s) - fflush (stdout); /* XXX */ - fflush (stderr); - -+ /* Clean up the terminal if we are in a state where it's been modified. */ -+#if defined (READLINE) -+ if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function) -+ (*rl_deprep_term_function) (); -+#endif -+ if (read_tty_modified ()) -+ read_tty_cleanup (); -+ - /* Do trap[0] if defined. Allow it to override the exit status - passed to us. */ - if (signal_is_trapped (0)) ---- a/builtins/read.def -+++ b/builtins/read.def -@@ -140,10 +140,12 @@ static void reset_alarm __P((void)); - procenv_t alrmbuf; - int sigalrm_seen; - --static int reading; -+static int reading, tty_modified; - static SigHandler *old_alrm; - static unsigned char delim; - -+static struct ttsave termsave; -+ - /* In all cases, SIGALRM just sets a flag that we check periodically. This - avoids problems with the semi-tricky stuff we do with the xfree of - input_string at the top of the unwind-protect list (see below). */ -@@ -188,7 +190,6 @@ read_builtin (list) - struct stat tsb; - SHELL_VAR *var; - TTYSTRUCT ttattrs, ttset; -- struct ttsave termsave; - #if defined (ARRAY_VARS) - WORD_LIST *alist; - #endif -@@ -221,7 +222,7 @@ read_builtin (list) - USE_VAR(ps2); - USE_VAR(lastsig); - -- sigalrm_seen = reading = 0; -+ sigalrm_seen = reading = tty_modified = 0; - - i = 0; /* Index into the string that we are reading. */ - raw = edit = 0; /* Not reading raw input by default. */ -@@ -438,6 +439,8 @@ read_builtin (list) - retval = 128+SIGALRM; - goto assign_vars; - } -+ if (interactive_shell == 0) -+ initialize_terminating_signals (); - old_alrm = set_signal_handler (SIGALRM, sigalrm); - add_unwind_protect (reset_alarm, (char *)NULL); - #if defined (READLINE) -@@ -482,7 +485,10 @@ read_builtin (list) - i = silent ? ttfd_cbreak (fd, &ttset) : ttfd_onechar (fd, &ttset); - if (i < 0) - sh_ttyerror (1); -+ tty_modified = 1; - add_unwind_protect ((Function *)ttyrestore, (char *)&termsave); -+ if (interactive_shell == 0) -+ initialize_terminating_signals (); - } - } - else if (silent) /* turn off echo but leave term in canonical mode */ -@@ -497,7 +503,10 @@ read_builtin (list) - if (i < 0) - sh_ttyerror (1); - -+ tty_modified = 1; - add_unwind_protect ((Function *)ttyrestore, (char *)&termsave); -+ if (interactive_shell == 0) -+ initialize_terminating_signals (); - } - - /* This *must* be the top unwind-protect on the stack, so the manipulation -@@ -588,6 +597,8 @@ read_builtin (list) - } - else - lastsig = 0; -+ if (terminating_signal && tty_modified) -+ ttyrestore (&termsave); /* fix terminal before exiting */ - CHECK_TERMSIG; - eof = 1; - break; -@@ -978,6 +989,20 @@ ttyrestore (ttp) - struct ttsave *ttp; - { - ttsetattr (ttp->fd, ttp->attrs); -+ tty_modified = 0; -+} -+ -+void -+read_tty_cleanup () -+{ -+ if (tty_modified) -+ ttyrestore (&termsave); -+} -+ -+int -+read_tty_modified () -+{ -+ return (tty_modified); - } - - #if defined (READLINE) ---- a/builtins/common.h -+++ b/builtins/common.h -@@ -122,6 +122,10 @@ extern void bash_logout __P((void)); - /* Functions from getopts.def */ - extern void getopts_reset __P((int)); - -+/* Functions from read.def */ -+extern void read_tty_cleanup __P((void)); -+extern int read_tty_modified __P((void)); -+ - /* Functions from set.def */ - extern int minus_o_option_value __P((char *)); - extern void list_minus_o_opts __P((int, int)); ---- a/bashline.c -+++ b/bashline.c -@@ -202,6 +202,7 @@ extern int current_command_line_count, s - extern int last_command_exit_value; - extern int array_needs_making; - extern int posixly_correct, no_symbolic_links; -+extern int sigalrm_seen; - extern char *current_prompt_string, *ps1_prompt; - extern STRING_INT_ALIST word_token_alist[]; - extern sh_builtin_func_t *last_shell_builtin, *this_shell_builtin; -@@ -4208,8 +4209,9 @@ bash_event_hook () - { - /* If we're going to longjmp to top_level, make sure we clean up readline. - check_signals will call QUIT, which will eventually longjmp to top_level, -- calling run_interrupt_trap along the way. */ -- if (interrupt_state) -+ calling run_interrupt_trap along the way. The check for sigalrm_seen is -+ to clean up the read builtin's state. */ -+ if (terminating_signal || interrupt_state || sigalrm_seen) - rl_cleanup_after_signal (); - bashline_reset_event_hook (); - check_signals_and_traps (); /* XXX */ ---- a/sig.c -+++ b/sig.c -@@ -532,8 +532,10 @@ termsig_sighandler (sig) - #if defined (READLINE) - /* Set the event hook so readline will call it after the signal handlers - finish executing, so if this interrupted character input we can get -- quick response. */ -- if (interactive_shell && interactive && no_line_editing == 0) -+ quick response. If readline is active or has modified the terminal we -+ need to set this no matter what the signal is, though the check for -+ RL_STATE_TERMPREPPED is possibly redundant. */ -+ if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE (RL_STATE_TERMPREPPED)) - bashline_set_event_hook (); - #endif - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 32 -+#define PATCHLEVEL 33 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/134-upstream-bash43-034.patch b/utils/bash/patches/134-upstream-bash43-034.patch deleted file mode 100644 index d3c4f8f1d4..0000000000 --- a/utils/bash/patches/134-upstream-bash43-034.patch +++ /dev/null @@ -1,74 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-034 - -Bug-Reported-by: Dreamcat4 -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-05/msg00001.html - -Bug-Description: - -If neither the -f nor -v options is supplied to unset, and a name argument is -found to be a function and unset, subsequent name arguments are not treated as -variables before attempting to unset a function by that name. - -Patch (apply with `patch -p0'): - ---- a/builtins/set.def -+++ b/builtins/set.def -@@ -751,9 +751,11 @@ unset_builtin (list) - WORD_LIST *list; - { - int unset_function, unset_variable, unset_array, opt, nameref, any_failed; -+ int global_unset_func, global_unset_var; - char *name; - - unset_function = unset_variable = unset_array = nameref = any_failed = 0; -+ global_unset_func = global_unset_var = 0; - - reset_internal_getopt (); - while ((opt = internal_getopt (list, "fnv")) != -1) -@@ -761,10 +763,10 @@ unset_builtin (list) - switch (opt) - { - case 'f': -- unset_function = 1; -+ global_unset_func = 1; - break; - case 'v': -- unset_variable = 1; -+ global_unset_var = 1; - break; - case 'n': - nameref = 1; -@@ -777,7 +779,7 @@ unset_builtin (list) - - list = loptend; - -- if (unset_function && unset_variable) -+ if (global_unset_func && global_unset_var) - { - builtin_error (_("cannot simultaneously unset a function and a variable")); - return (EXECUTION_FAILURE); -@@ -795,6 +797,9 @@ unset_builtin (list) - - name = list->word->word; - -+ unset_function = global_unset_func; -+ unset_variable = global_unset_var; -+ - #if defined (ARRAY_VARS) - unset_array = 0; - if (!unset_function && valid_array_reference (name)) ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 33 -+#define PATCHLEVEL 34 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/135-upstream-bash43-035.patch b/utils/bash/patches/135-upstream-bash43-035.patch deleted file mode 100644 index 4e614ce112..0000000000 --- a/utils/bash/patches/135-upstream-bash43-035.patch +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-035 - -Bug-Reported-by: -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00045.html - -Bug-Description: - -A locale with a long name can trigger a buffer overflow and core dump. This -applies on systems that do not have locale_charset in libc, are not using -GNU libiconv, and are not using the libintl that ships with bash in lib/intl. - -Patch (apply with `patch -p0'): - ---- a/lib/sh/unicode.c -+++ b/lib/sh/unicode.c -@@ -78,13 +78,15 @@ stub_charset () - s = strrchr (locale, '.'); - if (s) - { -- strcpy (charsetbuf, s+1); -+ strncpy (charsetbuf, s+1, sizeof (charsetbuf) - 1); -+ charsetbuf[sizeof (charsetbuf) - 1] = '\0'; - t = strchr (charsetbuf, '@'); - if (t) - *t = 0; - return charsetbuf; - } -- strcpy (charsetbuf, locale); -+ strncpy (charsetbuf, locale, sizeof (charsetbuf) - 1); -+ charsetbuf[sizeof (charsetbuf) - 1] = '\0'; - return charsetbuf; - } - #endif ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 34 -+#define PATCHLEVEL 35 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/136-upstream-bash43-036.patch b/utils/bash/patches/136-upstream-bash43-036.patch deleted file mode 100644 index 198b662c36..0000000000 --- a/utils/bash/patches/136-upstream-bash43-036.patch +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-036 - -Bug-Reported-by: emanuelczirai@cryptolab.net -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00071.html - -Bug-Description: - -When evaluating and setting integer variables, and the assignment fails to -create a variable (for example, when performing an operation on an array -variable with an invalid subscript), bash attempts to dereference a null -pointer, causing a segmentation violation. - -Patch (apply with `patch -p0'): - ---- a/variables.c -+++ b/variables.c -@@ -2833,10 +2833,12 @@ bind_int_variable (lhs, rhs) - #endif - v = bind_variable (lhs, rhs, 0); - -- if (v && isint) -- VSETATTR (v, att_integer); -- -- VUNSETATTR (v, att_invisible); -+ if (v) -+ { -+ if (isint) -+ VSETATTR (v, att_integer); -+ VUNSETATTR (v, att_invisible); -+ } - - return (v); - } ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 35 -+#define PATCHLEVEL 36 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/137-upstream-bash43-037.patch b/utils/bash/patches/137-upstream-bash43-037.patch deleted file mode 100644 index 946e9fe14e..0000000000 --- a/utils/bash/patches/137-upstream-bash43-037.patch +++ /dev/null @@ -1,38 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-037 - -Bug-Reported-by: Greg Wooledge -Bug-Reference-ID: <20150204144240.GN13956@eeg.ccf.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00007.html - -Bug-Description: - -If an associative array uses `@' or `*' as a subscript, `declare -p' produces -output that cannot be reused as input. - -Patch (apply with `patch -p0'): - ---- a/assoc.c -+++ b/assoc.c -@@ -436,6 +436,8 @@ assoc_to_assign (hash, quoted) - #if 1 - if (sh_contains_shell_metas (tlist->key)) - istr = sh_double_quote (tlist->key); -+ else if (ALL_ELEMENT_SUB (tlist->key[0]) && tlist->key[1] == '\0') -+ istr = sh_double_quote (tlist->key); - else - istr = tlist->key; - #else ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 36 -+#define PATCHLEVEL 37 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/138-upstream-bash43-038.patch b/utils/bash/patches/138-upstream-bash43-038.patch deleted file mode 100644 index 9857847596..0000000000 --- a/utils/bash/patches/138-upstream-bash43-038.patch +++ /dev/null @@ -1,67 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-038 - -Bug-Reported-by: worley@alum.mit.edu (Dale R. Worley) -Bug-Reference-ID: <201406100051.s5A0pCeB014978@hobgoblin.ariadne.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00028.html - -Bug-Description: - -There are a number of instances where `time' is not recognized as a reserved -word when the shell grammar says it should be. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -2818,11 +2818,16 @@ time_command_acceptable () - case AND_AND: - case OR_OR: - case '&': -+ case WHILE: - case DO: -+ case UNTIL: -+ case IF: - case THEN: -+ case ELIF: - case ELSE: - case '{': /* } */ -- case '(': /* ) */ -+ case '(': /* )( */ -+ case ')': /* only valid in case statement */ - case BANG: /* ! time pipeline */ - case TIME: /* time time pipeline */ - case TIMEOPT: /* time -p time pipeline */ ---- a/y.tab.c -+++ b/y.tab.c -@@ -5130,11 +5130,16 @@ time_command_acceptable () - case AND_AND: - case OR_OR: - case '&': -+ case WHILE: - case DO: -+ case UNTIL: -+ case IF: - case THEN: -+ case ELIF: - case ELSE: - case '{': /* } */ -- case '(': /* ) */ -+ case '(': /* )( */ -+ case ')': /* only valid in case statement */ - case BANG: /* ! time pipeline */ - case TIME: /* time time pipeline */ - case TIMEOPT: /* time -p time pipeline */ ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 37 -+#define PATCHLEVEL 38 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/139-upstream-bash43-039.patch b/utils/bash/patches/139-upstream-bash43-039.patch deleted file mode 100644 index f8ad363f3e..0000000000 --- a/utils/bash/patches/139-upstream-bash43-039.patch +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-039 - -Bug-Reported-by: SN -Bug-Reference-ID: <54E2554C.205@gazeta.pl> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00060.html - -Bug-Description: - -Using the output of `declare -p' when run in a function can result in variables -that are invisible to `declare -p'. This problem occurs when an assignment -builtin such as `declare' receives a quoted compound array assignment as one of -its arguments. - -Patch (apply with `patch -p0'): - ---- a/arrayfunc.c -+++ b/arrayfunc.c -@@ -404,6 +404,9 @@ assign_array_var_from_word_list (var, li - (*var->assign_func) (var, l->word->word, i, 0); - else - array_insert (a, i, l->word->word); -+ -+ VUNSETATTR (var, att_invisible); /* no longer invisible */ -+ - return var; - } - -@@ -634,6 +637,10 @@ assign_array_var_from_string (var, value - - if (nlist) - dispose_words (nlist); -+ -+ if (var) -+ VUNSETATTR (var, att_invisible); /* no longer invisible */ -+ - return (var); - } - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 38 -+#define PATCHLEVEL 39 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/140-upstream-bash43-040.patch b/utils/bash/patches/140-upstream-bash43-040.patch deleted file mode 100644 index a329d37f39..0000000000 --- a/utils/bash/patches/140-upstream-bash43-040.patch +++ /dev/null @@ -1,38 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-040 - -Bug-Reported-by: Jean Delvare -Bug-Reference-ID: <20150609180231.5f463695@endymion.delvare> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00033.html - -Bug-Description: - -There is a memory leak that occurs when bash expands an array reference on -the rhs of an assignment statement. - -Patch (apply with `patch -p0'): - ---- a/subst.c -+++ b/subst.c -@@ -5782,7 +5782,7 @@ expand_arrayref: - /* XXX - does this leak if name[@] or name[*]? */ - if (pflags & PF_ASSIGNRHS) - { -- temp = array_variable_name (name, &tt, (int *)0); -+ var = array_variable_part (name, &tt, (int *)0); - if (ALL_ELEMENT_SUB (tt[0]) && tt[1] == ']') - temp = array_value (name, quoted|Q_DOUBLE_QUOTES, 0, &atype, &ind); - else ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 39 -+#define PATCHLEVEL 40 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/141-upstream-bash43-041.patch b/utils/bash/patches/141-upstream-bash43-041.patch deleted file mode 100644 index 75fdace428..0000000000 --- a/utils/bash/patches/141-upstream-bash43-041.patch +++ /dev/null @@ -1,67 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-041 - -Bug-Reported-by: Hanno Böck -Bug-Reference-ID: <20150623131106.6f111da9@pc1>, <20150707004640.0e61d2f9@pc1> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00089.html, - http://lists.gnu.org/archive/html/bug-bash/2015-07/msg00018.html - -Bug-Description: - -There are several out-of-bounds read errors that occur when completing command -lines where assignment statements appear before the command name. The first -two appear only when programmable completion is enabled; the last one only -happens when listing possible completions. - -Patch (apply with `patch -p0'): - ---- a/bashline.c -+++ b/bashline.c -@@ -1468,10 +1468,23 @@ attempt_shell_completion (text, start, e - - os = start; - n = 0; -+ was_assignment = 0; - s = find_cmd_start (os); - e = find_cmd_end (end); - do - { -+ /* Don't read past the end of rl_line_buffer */ -+ if (s > rl_end) -+ { -+ s1 = s = e1; -+ break; -+ } -+ /* Or past point if point is within an assignment statement */ -+ else if (was_assignment && s > rl_point) -+ { -+ s1 = s = e1; -+ break; -+ } - /* Skip over assignment statements preceding a command name. If we - don't find a command name at all, we can perform command name - completion. If we find a partial command name, we should perform ---- a/lib/readline/complete.c -+++ b/lib/readline/complete.c -@@ -689,6 +689,8 @@ printable_part (pathname) - - if (temp == 0 || *temp == '\0') - return (pathname); -+ else if (temp[1] == 0 && temp == pathname) -+ return (pathname); - /* If the basename is NULL, we might have a pathname like '/usr/src/'. - Look for a previous slash and, if one is found, return the portion - following that slash. If there's no previous slash, just return the ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 40 -+#define PATCHLEVEL 41 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/142-upstream-bash43-042.patch b/utils/bash/patches/142-upstream-bash43-042.patch deleted file mode 100644 index bf1546be95..0000000000 --- a/utils/bash/patches/142-upstream-bash43-042.patch +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-042 - -Bug-Reported-by: Nathan Neulinger -Bug-Reference-ID: <558EFDF2.7060402@neulinger.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00096.html - -Bug-Description: - -There is a problem when parsing command substitutions containing `case' -commands within pipelines that causes the parser to not correctly identify -the end of the command substitution. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -3708,6 +3708,8 @@ eof_error: - /*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/ - tflags |= LEX_INWORD; - lex_wlen = 0; -+ if (tflags & LEX_RESWDOK) -+ lex_rwlen = 0; - } - } - ---- a/y.tab.c -+++ b/y.tab.c -@@ -6020,6 +6020,8 @@ eof_error: - /*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/ - tflags |= LEX_INWORD; - lex_wlen = 0; -+ if (tflags & LEX_RESWDOK) -+ lex_rwlen = 0; - } - } - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 41 -+#define PATCHLEVEL 42 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/btrfs-progs/Makefile b/utils/btrfs-progs/Makefile index 845452a4e9..ec3f88d6ee 100644 --- a/utils/btrfs-progs/Makefile +++ b/utils/btrfs-progs/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=btrfs-progs -PKG_VERSION:=4.11 -PKG_RELEASE:=2 +PKG_VERSION:=4.13.2 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@KERNEL/linux/kernel/people/kdave/btrfs-progs/ -PKG_HASH:=e17a68cc52a27d905b715445e91ddbaa4d42de4847d54836d6ed21e012dabf0e +PKG_HASH:=75c7331f1306495dfffabe542ef6c5539808f0cdaebdf14fa8b7ab09c59448bd PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-v$(PKG_VERSION) PKG_LICENSE:=GPL-2.0 diff --git a/utils/f2fs-tools/Makefile b/utils/f2fs-tools/Makefile deleted file mode 100644 index 6a39bc72f6..0000000000 --- a/utils/f2fs-tools/Makefile +++ /dev/null @@ -1,90 +0,0 @@ -# -# Copyright (C) 2014 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=f2fs-tools -PKG_VERSION:=1.7.0 -PKG_RELEASE:=1 - -PKG_LICENSE:=GPLv2 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git/snapshot/ -PKG_MD5SUM:=9db22274264f0c88dbee012f257917b1 - -PKG_FIXUP:=autoreconf -PKG_BUILD_PARALLEL:=1 -PKG_INSTALL:=1 - -PKG_MAINTAINER:=Luka Perkov - -include $(INCLUDE_DIR)/package.mk - -define Package/f2fs-tools/Default - SECTION:=utils - CATEGORY:=Utilities - SUBMENU:=Filesystem - DEPENDS:=+libf2fs - URL:=http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git -endef - -define Package/mkf2fs - $(Package/f2fs-tools/Default) - TITLE:=Utility for creating a Flash-Friendly File System (F2FS) -endef - -define Package/f2fsck - $(Package/f2fs-tools/Default) - TITLE:=Utility for checking/repairing a Flash-Friendly File System (F2FS) -endef - -define Package/f2fs-tools - $(Package/f2fs-tools/Default) - TITLE:=Tools for Flash-Friendly File System (F2FS) - DEPENDS += +mkf2fs +f2fsck -endef - -define Package/libf2fs - SECTION:=libs - CATEGORY:=Libraries - TITLE:=Library for Flash-Friendly File System (F2FS) tools - DEPENDS:=+libuuid -endef - -define Package/libf2fs/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/libf2fs.so* $(1)/usr/lib/ -endef - -define Package/mkf2fs/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/mkfs.f2fs $(1)/usr/sbin -endef - -define Package/f2fsck/install - $(INSTALL_DIR) $(1)/usr/sbin - - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/fsck.f2fs $(1)/usr/sbin - ln -s /usr/sbin/fsck.f2fs $(1)/usr/sbin/defrag.f2fs - ln -s /usr/sbin/fsck.f2fs $(1)/usr/sbin/dump.f2fs - ln -s /usr/sbin/fsck.f2fs $(1)/usr/sbin/sload.f2fs - ln -s /usr/sbin/fsck.f2fs $(1)/usr/sbin/resize.f2fs -endef - -define Package/f2fs-tools/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/f2fstat $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/fibmap.f2fs $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/parse.f2fs $(1)/usr/sbin -endef - -$(eval $(call BuildPackage,libf2fs)) -$(eval $(call BuildPackage,mkf2fs)) -$(eval $(call BuildPackage,f2fsck)) -$(eval $(call BuildPackage,f2fs-tools)) diff --git a/utils/f2fs-tools/patches/001-compile.patch b/utils/f2fs-tools/patches/001-compile.patch deleted file mode 100644 index 2ff6ee832d..0000000000 --- a/utils/f2fs-tools/patches/001-compile.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- a/configure.ac -+++ b/configure.ac -@@ -20,14 +20,9 @@ AC_DEFINE([F2FS_MINOR_VERSION], m4_bpats - [\([0-9]*\).\([0-9]*\)\(\w\|\W\)*], [\2]), - [Minor version for f2fs-tools]) - --AC_CHECK_FILE(.git, -- AC_DEFINE([F2FS_TOOLS_DATE], -- "m4_bpatsubst(f2fs_tools_gitdate, -- [\([0-9-]*\)\(\w\|\W\)*], [\1])", -- [f2fs-tools date based on Git commits]), -- AC_DEFINE([F2FS_TOOLS_DATE], -+AC_DEFINE([F2FS_TOOLS_DATE], - "f2fs_tools_date", -- [f2fs-tools date based on Source releases])) -+ [f2fs-tools date based on Source releases]) - - AC_CONFIG_SRCDIR([config.h.in]) - AC_CONFIG_HEADER([config.h]) diff --git a/utils/f2fs-tools/patches/010-include-byteswap-h.patch b/utils/f2fs-tools/patches/010-include-byteswap-h.patch deleted file mode 100644 index b8c9ff30e5..0000000000 --- a/utils/f2fs-tools/patches/010-include-byteswap-h.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/include/f2fs_fs.h -+++ b/include/f2fs_fs.h -@@ -12,6 +12,7 @@ - #include - #include - #include -+#include - - #ifdef HAVE_CONFIG_H - #include diff --git a/utils/f2fs-tools/patches/020-sload.f2fs-allow-to-build-without-libselinux.patch b/utils/f2fs-tools/patches/020-sload.f2fs-allow-to-build-without-libselinux.patch deleted file mode 100644 index eac06c9d3e..0000000000 --- a/utils/f2fs-tools/patches/020-sload.f2fs-allow-to-build-without-libselinux.patch +++ /dev/null @@ -1,100 +0,0 @@ -From b0a2386089fd6efade6b89094325ed8a9f8c6fff Mon Sep 17 00:00:00 2001 -From: Christian Hesse -Date: Sat, 22 Oct 2016 22:06:54 +0200 -Subject: [PATCH] sload.f2fs: allow to build without libselinux - -Some systems do not have libselinux. Allow to build sload.f2fs without -support for selinux. - -Signed-off-by: Christian Hesse -Signed-off-by: Jaegeuk Kim ---- - configure.ac | 4 +++- - fsck/sload.c | 12 +++++++++++- - 2 files changed, 14 insertions(+), 2 deletions(-) - -diff --git a/configure.ac b/configure.ac -index f519790..7a62328 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -54,7 +54,9 @@ AC_PATH_PROG([LDCONFIG], [ldconfig], - - # Checks for libraries. - PKG_CHECK_MODULES([libuuid], [uuid]) --PKG_CHECK_MODULES([libselinux], [libselinux]) -+PKG_CHECK_MODULES([libselinux], [libselinux], -+ [AC_DEFINE([HAVE_LIBSELINUX], [1], [Use libselinux])], -+ [AC_MSG_NOTICE([libselinux not found])]) - - # Checks for header files. - AC_CHECK_HEADERS([linux/fs.h fcntl.h mntent.h stdlib.h string.h \ -diff --git a/fsck/sload.c b/fsck/sload.c -index ea072d1..68799c1 100644 ---- a/fsck/sload.c -+++ b/fsck/sload.c -@@ -16,8 +16,11 @@ - #include - #include - #include -+ -+#ifdef HAVE_LIBSELINUX - #include - #include -+#endif - - #ifdef WITH_ANDROID - #include -@@ -110,10 +113,12 @@ static int build_directory(struct f2fs_sb_info *sbi, const char *full_path, - handle_selabel(dentries + i, S_ISDIR(stat.st_mode), - target_out_dir); - -+#ifdef HAVE_LIBSELINUX - if (sehnd && selabel_lookup(sehnd, &dentries[i].secon, - dentries[i].path, stat.st_mode) < 0) - ERR_MSG("Cannot lookup security context for %s\n", - dentries[i].path); -+#endif - - dentries[i].pino = dir_ino; - -@@ -174,6 +179,7 @@ static int build_directory(struct f2fs_sb_info *sbi, const char *full_path, - MSG(1, "Error unknown file type\n"); - } - -+#ifdef HAVE_LIBSELINUX - if (dentries[i].secon) { - inode_set_selinux(sbi, dentries[i].ino, dentries[i].secon); - MSG(1, "File = %s \n----->SELinux context = %s\n", -@@ -184,10 +190,12 @@ static int build_directory(struct f2fs_sb_info *sbi, const char *full_path, - dentries[i].gid, dentries[i].capabilities); - } - -+ free(dentries[i].secon); -+#endif -+ - free(dentries[i].path); - free(dentries[i].full_path); - free((void *)dentries[i].name); -- free(dentries[i].secon); - } - - free(dentries); -@@ -218,6 +226,7 @@ int f2fs_sload(struct f2fs_sb_info *sbi, const char *from_dir, - return ret; - } - -+#ifdef HAVE_LIBSELINUX - if (sehnd) { - char *secontext = NULL; - -@@ -233,6 +242,7 @@ int f2fs_sload(struct f2fs_sb_info *sbi, const char *from_dir, - } - free(secontext); - } -+#endif - - /* update curseg info; can update sit->types */ - move_curseg_info(sbi, SM_I(sbi)->main_blkaddr); --- -2.10.0 -