← Commit list

2d6af1603

Rob Landley
Rob Landley
2006-06-21
SOURCE BUG Duration: 49s

Subject

Zubicaray reported a bug in vi that causes it to eat 100% cpu when you close an xterm it's running in. The vi signal behavior would catch and restarts lots of signals, like SIGHUP, that should just kill the thing. (Leftover behavior from when it would segfault all the time.) Filtered out the more

SOURCE BUG

This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)

→ Bu hatanin tam hikayesini ve duzeltme diffini gor

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

editors/vi.c+2 -87
@@ -6,14 +6,6 @@
* Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
*/
-/*
- * To compile for standalone use:
- * gcc -Wall -Os -s -DSTANDALONE -o vi vi.c
- * or
- * gcc -Wall -Os -s -DSTANDALONE -DCONFIG_FEATURE_VI_CRASHME -o vi vi.c # include testing features
- * strip vi
- */
-
/*
* Things To Do:
* EXINIT
@@ -30,50 +22,20 @@
* An "ex" line oriented mode- maybe using "cmdedit"
*/
-//---- Feature -------------- Bytes to implement
-#ifdef STANDALONE
-#define vi_main main
-#define CONFIG_FEATURE_VI_COLON // 4288
-#define CONFIG_FEATURE_VI_YANKMARK // 1408
-#define CONFIG_FEATURE_VI_SEARCH // 1088
-#define CONFIG_FEATURE_VI_USE_SIGNALS // 1056
-#define CONFIG_FEATURE_VI_DOT_CMD // 576
-#define CONFIG_FEATURE_VI_READONLY // 128
-#define CONFIG_FEATURE_VI_SETOPTS // 576
-#define CONFIG_FEATURE_VI_SET // 224
-#define CONFIG_FEATURE_VI_WIN_RESIZE // 256 WIN_RESIZE
-// To test editor using CRASHME:
-// vi -C filename
-// To stop testing, wait until all to text[] is deleted, or
-// Ctrl-Z and kill -9 %1
-// while in the editor Ctrl-T will toggle the crashme function on and off.
-//#define CONFIG_FEATURE_VI_CRASHME // randomly pick commands to execute
-#endif /* STANDALONE */
-
-#include <stdio.h>
-#include <stdlib.h>
+
+#include "busybox.h"
#include <string.h>
#include <strings.h>
-#include <termios.h>
#include <unistd.h>
#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
#include <time.h>
#include <fcntl.h>
#include <signal.h>
#include <setjmp.h>
#include <regex.h>
#include <ctype.h>
-#include <assert.h>
#include <errno.h>
-#include <stdarg.h>
-#ifndef STANDALONE
-#include "busybox.h"
#define vi_Version BB_VER " " BB_BT
-#else
-#define vi_Version "standalone"
-#endif /* STANDALONE */
#ifdef CONFIG_LOCALE_SUPPORT
#define Isprint(c) isprint((c))
@@ -81,10 +43,6 @@
#define Isprint(c) ( (c) >= ' ' && (c) != 127 && (c) != ((unsigned char)'\233') )
#endif
-#ifndef TRUE
-#define TRUE ((int)1)
-#define FALSE ((int)0)
-#endif /* TRUE */
#define MAX_SCR_COLS BUFSIZ
// Misc. non-Ascii keys that report an escape sequence
@@ -288,7 +246,6 @@ static void colon(Byte *); // execute the "colon" mode cmds
static void winch_sig(int); // catch window size changes
static void suspend_sig(int); // catch ctrl-Z
static void catch_sig(int); // catch ctrl-C and alarm time-outs
-static void core_sig(int); // catch a core dump signal
#endif /* CONFIG_FEATURE_VI_USE_SIGNALS */
#ifdef CONFIG_FEATURE_VI_DOT_CMD
static void start_new_cmd_q(Byte); // new queue for command
@@ -461,29 +418,10 @@ static void edit_file(Byte * fn)
#ifdef CONFIG_FEATURE_VI_USE_SIGNALS
catch_sig(0);
- core_sig(0);
signal(SIGWINCH, winch_sig);
signal(SIGTSTP, suspend_sig);
sig = setjmp(restart);
if (sig != 0) {
- const char *msg = "";
-
- if (sig == SIGWINCH)
- msg = "(window resize)";
- if (sig == SIGHUP)
- msg = "(hangup)";
- if (sig == SIGINT)
- msg = "(interrupt)";
- if (sig == SIGTERM)
- msg = "(terminate)";
- if (sig == SIGBUS)
- msg = "(bus error)";
- if (sig == SIGSEGV)
- msg = "(I tried to touch invalid memory)";
- if (sig == SIGALRM)
- msg = "(alarm)";
-
- psbs("-- caught signal %d %s--", sig, msg);
screenbegin = dot = text;
}
#endif /* CONFIG_FEATURE_VI_USE_SIGNALS */
@@ -2165,33 +2103,10 @@ static void suspend_sig(int sig ATTRIBUTE_UNUSED)
//----- Come here when we get a signal ---------------------------
static void catch_sig(int sig)
{
- signal(SIGHUP, catch_sig);
signal(SIGINT, catch_sig);
- signal(SIGTERM, catch_sig);
- signal(SIGALRM, catch_sig);
if(sig)
longjmp(restart, sig);
}
-
-//----- Come here when we get a core dump signal -----------------
-static void core_sig(int sig)
-{
- signal(SIGQUIT, core_sig);
- signal(SIGILL, core_sig);
- signal(SIGTRAP, core_sig);
- signal(SIGABRT, core_sig);
- signal(SIGFPE, core_sig);
- signal(SIGBUS, core_sig);
- signal(SIGSEGV, core_sig);
-#ifdef SIGSYS
- signal(SIGSYS, core_sig);
-#endif
-
- if(sig) { // signaled
- dot = bound_dot(dot); // make sure "dot" is valid
- longjmp(restart, sig);
- }
-}
#endif /* CONFIG_FEATURE_VI_USE_SIGNALS */
static int mysleep(int hund) // sleep for 'h' 1/100 seconds