To: vim_dev@googlegroups.com Subject: Patch 8.1.2149 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.2149 Problem: Crash when running out of memory very early. Solution: Do not use IObuff when it's NULL. (closes #5052) Files: src/message.c *** ../vim-8.1.2148/src/message.c 2019-10-12 17:06:48.798440368 +0200 --- src/message.c 2019-10-14 22:01:29.612929964 +0200 *************** *** 356,389 **** int smsg(const char *s, ...) { ! va_list arglist; ! va_start(arglist, s); ! vim_vsnprintf((char *)IObuff, IOSIZE, s, arglist); ! va_end(arglist); ! return msg((char *)IObuff); } int smsg_attr(int attr, const char *s, ...) { ! va_list arglist; ! va_start(arglist, s); ! vim_vsnprintf((char *)IObuff, IOSIZE, s, arglist); ! va_end(arglist); ! return msg_attr((char *)IObuff, attr); } int smsg_attr_keep(int attr, const char *s, ...) { ! va_list arglist; ! va_start(arglist, s); ! vim_vsnprintf((char *)IObuff, IOSIZE, s, arglist); ! va_end(arglist); ! return msg_attr_keep((char *)IObuff, attr, TRUE); } #endif --- 356,416 ---- int smsg(const char *s, ...) { ! if (IObuff == NULL) ! { ! // Very early in initialisation and already something wrong, just ! // give the raw message so the user at least gets a hint. ! return msg((char *)s); ! } ! else ! { ! va_list arglist; ! va_start(arglist, s); ! vim_vsnprintf((char *)IObuff, IOSIZE, s, arglist); ! va_end(arglist); ! return msg((char *)IObuff); ! } } int smsg_attr(int attr, const char *s, ...) { ! if (IObuff == NULL) ! { ! // Very early in initialisation and already something wrong, just ! // give the raw message so the user at least gets a hint. ! return msg_attr((char *)s, attr); ! } ! else ! { ! va_list arglist; ! va_start(arglist, s); ! vim_vsnprintf((char *)IObuff, IOSIZE, s, arglist); ! va_end(arglist); ! return msg_attr((char *)IObuff, attr); ! } } int smsg_attr_keep(int attr, const char *s, ...) { ! if (IObuff == NULL) ! { ! // Very early in initialisation and already something wrong, just ! // give the raw message so the user at least gets a hint. ! return msg_attr_keep((char *)s, attr, TRUE); ! } ! else ! { ! va_list arglist; ! va_start(arglist, s); ! vim_vsnprintf((char *)IObuff, IOSIZE, s, arglist); ! va_end(arglist); ! return msg_attr_keep((char *)IObuff, attr, TRUE); ! } } #endif *************** *** 723,739 **** int semsg(const char *s, ...) { ! /* Skip this if not giving error messages at the moment. */ if (!emsg_not_now()) { ! va_list ap; ! va_start(ap, s); ! vim_vsnprintf((char *)IObuff, IOSIZE, s, ap); ! va_end(ap); ! return emsg_core(IObuff); } ! return TRUE; /* no error messages at the moment */ } #endif --- 750,775 ---- int semsg(const char *s, ...) { ! // Skip this if not giving error messages at the moment. if (!emsg_not_now()) { ! if (IObuff == NULL) ! { ! // Very early in initialisation and already something wrong, just ! // give the raw message so the user at least gets a hint. ! return emsg_core((char_u *)s); ! } ! else ! { ! va_list ap; ! va_start(ap, s); ! vim_vsnprintf((char *)IObuff, IOSIZE, s, ap); ! va_end(ap); ! return emsg_core(IObuff); ! } } ! return TRUE; // no error messages at the moment } #endif *************** *** 764,775 **** { if (!emsg_not_now()) { ! va_list ap; ! va_start(ap, s); ! vim_vsnprintf((char *)IObuff, IOSIZE, s, ap); ! va_end(ap); ! emsg_core(IObuff); } # ifdef ABORT_ON_INTERNAL_ERROR abort(); --- 800,820 ---- { if (!emsg_not_now()) { ! if (IObuff == NULL) ! { ! // Very early in initialisation and already something wrong, just ! // give the raw message so the user at least gets a hint. ! emsg_core((char_u *)s); ! } ! else ! { ! va_list ap; ! va_start(ap, s); ! vim_vsnprintf((char *)IObuff, IOSIZE, s, ap); ! va_end(ap); ! emsg_core(IObuff); ! } } # ifdef ABORT_ON_INTERNAL_ERROR abort(); *************** *** 3506,3513 **** void give_warning2(char_u *message, char_u *a1, int hl) { ! vim_snprintf((char *)IObuff, IOSIZE, (char *)message, a1); ! give_warning(IObuff, hl); } #endif --- 3551,3567 ---- void give_warning2(char_u *message, char_u *a1, int hl) { ! if (IObuff == NULL) ! { ! // Very early in initialisation and already something wrong, just give ! // the raw message so the user at least gets a hint. ! give_warning((char_u *)message, hl); ! } ! else ! { ! vim_snprintf((char *)IObuff, IOSIZE, (char *)message, a1); ! give_warning(IObuff, hl); ! } } #endif *** ../vim-8.1.2148/src/version.c 2019-10-13 21:01:31.058733704 +0200 --- src/version.c 2019-10-14 22:01:42.016880164 +0200 *************** *** 755,756 **** --- 755,758 ---- { /* Add new patch number below this line */ + /**/ + 2149, /**/ -- Zen Microsystems: we're the om in .commmmmmmmm /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///