backout https://github.com/vim/vim/commit/bd4614f43d0eac4aff743132bab8e53b015ac801.patch
segfaults seen, at least when using vim-airline

Index: src/evalfunc.c
--- src/evalfunc.c.orig
+++ src/evalfunc.c
@@ -11775,7 +11775,7 @@ f_substitute(typval_T *argvars, typval_T *rettv)
 								|| flg == NULL)
 	rettv->vval.v_string = NULL;
     else
-	rettv->vval.v_string = do_string_sub(str, STRLEN(str), pat, sub, expr, flg, NULL);
+	rettv->vval.v_string = do_string_sub(str, pat, sub, expr, flg);
 }
 
 /*
