-const char errlog_rcs[] = "$Id: errlog.c,v 1.118 2014/05/05 09:51:19 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/errlog.c,v $
* Purpose : Log errors to a designated destination in an elegant,
* printf-like fashion.
*
- * Copyright : Written by and Copyright (C) 2001-2010 the
- * Privoxy team. http://www.privoxy.org/
+ * Copyright : Written by and Copyright (C) 2001-2014 the
+ * Privoxy team. https://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
* by and Copyright (C) 1997 Anonymous Coders and
#include "jbsockets.h"
#endif
-const char errlog_h_rcs[] = ERRLOG_H_VERSION;
-
-
/*
* LOG_LEVEL_FATAL cannot be turned off. (There are
* some exceptional situations where we need to get a
*********************************************************************/
void set_debug_level(int debug_level)
{
+#ifdef FUZZ
+ if (LOG_LEVEL_STFU == debug_level)
+ {
+ debug = LOG_LEVEL_STFU;
+ }
+ if (LOG_LEVEL_STFU == debug)
+ {
+ return;
+ }
+#endif
+
debug = debug_level | LOG_LEVEL_MINIMUM;
}
*********************************************************************/
static long get_thread_id(void)
{
- long this_thread = 1; /* was: pthread_t this_thread;*/
+ long this_thread;
#ifdef __OS2__
PTIB ptib;
this_thread = (long)pthread_self();
#ifdef __MACH__
/*
- * Mac OSX (and perhaps other Mach instances) doesn't have a debuggable
- * value at the first 4 bytes of pthread_self()'s return value, a pthread_t.
- * pthread_t is supposed to be opaque... but it's fairly random, though, so
- * we make it mostly presentable.
+ * Mac OSX (and perhaps other Mach instances) doesn't have a unique
+ * value at the lowest order 4 bytes of pthread_self()'s return value, a pthread_t,
+ * so trim the three lowest-order bytes from the value (16^3).
*/
- this_thread = abs(this_thread % 1000);
+ this_thread = this_thread / 4096;
#endif /* def __MACH__ */
#elif defined(_WIN32)
this_thread = GetCurrentThreadId();
ulrc = DosGetInfoBlocks(&ptib, NULL);
if (ulrc == 0)
this_thread = ptib -> tib_ptib2 -> tib2_ultid;
+#else
+ /* Forking instead of threading. */
+ this_thread = 1;
#endif /* def FEATURE_PTHREAD */
return this_thread;
void log_error(int loglevel, const char *fmt, ...)
{
va_list ap;
- char *outbuf = NULL;
- static char *outbuf_save = NULL;
+ char outbuf[LOG_BUFFER_SIZE+1];
char tempbuf[LOG_BUFFER_SIZE];
size_t length = 0;
const char * src = fmt;
long thread_id;
char timestamp[30];
- /*
- * XXX: Make this a config option,
- * why else do we allocate instead of using
- * an array?
- */
- size_t log_buffer_size = LOG_BUFFER_SIZE;
+ const size_t log_buffer_size = LOG_BUFFER_SIZE;
#if defined(_WIN32) && !defined(_WIN_CONSOLE)
/*
#endif
)
{
+#ifdef FUZZ
+ if (debug == LOG_LEVEL_STFU)
+ {
+ return;
+ }
+#endif
if (loglevel == LOG_LEVEL_FATAL)
{
fatal_error("Fatal error. You're not supposed to"
thread_id = get_thread_id();
get_log_timestamp(timestamp, sizeof(timestamp));
- /* protect the whole function because of the static buffer (outbuf) */
- lock_logfile();
-
- if (NULL == outbuf_save)
- {
- outbuf_save = (char*)zalloc(log_buffer_size + 1); /* +1 for paranoia */
- if (NULL == outbuf_save)
- {
- snprintf(tempbuf, sizeof(tempbuf),
- "%s %08lx Fatal error: Out of memory in log_error().",
- timestamp, thread_id);
- fatal_error(tempbuf); /* Exit */
- return;
- }
- }
- outbuf = outbuf_save;
-
/*
* Memsetting the whole buffer to zero (in theory)
* makes things easier later on.
*/
- memset(outbuf, 0, log_buffer_size);
+ memset(outbuf, 0, sizeof(outbuf));
/* Add prefix for everything but Common Log Format messages */
if (loglevel != LOG_LEVEL_CLF)
assert(NULL != logfp);
#endif
+ lock_logfile();
+
if (loglevel == LOG_LEVEL_FATAL)
{
- fatal_error(outbuf_save);
+ fatal_error(outbuf);
/* Never get here */
}
if (logfp != NULL)
{
- fputs(outbuf_save, logfp);
+ fputs(outbuf, logfp);
}
#if defined(_WIN32) && !defined(_WIN_CONSOLE)
/* Write to display */
- LogPutString(outbuf_save);
+ LogPutString(outbuf);
#endif /* defined(_WIN32) && !defined(_WIN_CONSOLE) */
unlock_logfile();
*
* Description : Translates JB_ERR_FOO codes into strings.
*
- * XXX: the type of error codes is jb_err
- * but the typedef'inition is currently not
- * visible to all files that include errlog.h.
- *
* Parameters :
* 1 : jb_error = a valid jb_err code
*
* Returns : A string with the jb_err translation
*
*********************************************************************/
-const char *jb_err_to_string(int jb_error)
+const char *jb_err_to_string(jb_err jb_error)
{
switch (jb_error)
{
return "File has been modified outside of the CGI actions editor.";
case JB_ERR_COMPRESS:
return "(De)compression failure";
- default:
- assert(0);
- return "Unknown error";
}
assert(0);
return "Internal error";