Hi, all.
I found following bugs and probrems in websh-3.5.0.
a.websh can not deal non-ascii encoding.
if encoding system is non-ascii encoding, such as
euc-jp, or some iso-8859-SOMETHING, then page will
be broken.
Because,
- web_eval_tag() can not deal multi-byte strings.
- parseUrlEncodedFormData() fix stream encoding to binary.
Note; core of new web_eval_tag() is from tcl-rivet.
b.websh has local security probrem.
websh make tmp file for uploaded form data.
mode for this file is 644. so any local user can read them.
It should be 600.
c.some char *s should be CONST char *
d.targaet install-doc in Makefile is broken.
Now websh can deal any locales which supported on tcl encodings.
My Japanese ws3 page work correctly now.
Thanks.
Taguchi,T.
diff -ur websh-3.5.0.orig/src/generic/apchannel.c
websh-3.5.0/src/generic/apchannel.c
--- websh-3.5.0.orig/src/generic/apchannel.c Fri Oct 26 02:50:13 2001
+++ websh-3.5.0/src/generic/apchannel.c Wed May 25 14:16:21 2005
@@ -36,7 +36,7 @@
/* ----------------------------------------------------------------------------
* close apache channel
* ------------------------------------------------------------------------- */
-int apchannelCloseProc(ClientData clientData, Tcl_Interp * interp)
+static int apchannelCloseProc(ClientData clientData, Tcl_Interp *interp)
{
/* nothing to do */
@@ -46,7 +46,7 @@
/* ----------------------------------------------------------------------------
* input from apache channel
* ------------------------------------------------------------------------- */
-int apchannelInputProc(ClientData clientData,
+static int apchannelInputProc(ClientData clientData,
char *buf, int bufSize, int *errorCodePtr)
{
@@ -70,8 +70,8 @@
/* ----------------------------------------------------------------------------
* output to apache channel
* ------------------------------------------------------------------------- */
-int apchannelOutputProc(ClientData clientData,
- char *buf, int toWrite, int *errorCodePtr)
+static int apchannelOutputProc(ClientData clientData,
+ CONST84 char *buf, int toWrite, int *errorCodePtr)
{
int res = -1;
@@ -88,17 +88,26 @@
return res;
}
+static int apchannelSetOptProc(ClientData clientData,
+ Tcl_Interp *interp,
+ CONST char *optionname,
+ CONST84 char *value)
+{
+ return TCL_OK;
+}
+
+
/* ----------------------------------------------------------------------------
* watch apache channel
* ------------------------------------------------------------------------- */
-void apchannelWatchProc(ClientData clientData, int mask)
+static void apchannelWatchProc(ClientData clientData, int mask)
{
}
/* ----------------------------------------------------------------------------
* getHandle for apache channel
* ------------------------------------------------------------------------- */
-int apchannelGetHandleProc(ClientData clientData, int direction,
+static int apchannelGetHandleProc(ClientData clientData, int direction,
ClientData * handlePtr)
{
@@ -116,10 +125,12 @@
apchannelInputProc, /* Input proc. */
apchannelOutputProc, /* Output proc. */
NULL, /* Seek proc. */
- NULL, /* Set option proc. */
+ apchannelSetOptProc, /* Set option proc. */
NULL, /* Get option proc. */
apchannelWatchProc, /* Initialize notifier. */
apchannelGetHandleProc, /* Get OS handles out of channel. */
+ NULL,
+ NULL
};
/* ----------------------------------------------------------------------------
diff -ur websh-3.5.0.orig/src/generic/args.c websh-3.5.0/src/generic/args.c
--- websh-3.5.0.orig/src/generic/args.c Fri Oct 26 02:50:13 2001
+++ websh-3.5.0/src/generic/args.c Wed May 25 14:19:53 2005
@@ -26,7 +26,7 @@
* 3: key to search for
* R: 0..objc-1 or -1 in case of error
* ------------------------------------------------------------------------- */
-int argIndexOfKey(int objc, Tcl_Obj * CONST objv[], char *key)
+int argIndexOfKey(int objc, Tcl_Obj * CONST objv[], CONST char *key)
{
int pos = 1;
@@ -119,10 +119,10 @@
* argPosParam -- scan params to find key
* returns index to **params, if key is found, or -1
* ------------------------------------------------------------------------- */
-int argPosParam(char **params, char *key)
+int argPosParam(CONST char **params, CONST char *key)
{
- char **intParams;
+ CONST char **intParams;
int pos = 0;
intParams = params;
@@ -189,7 +189,7 @@
* note: assumes that first arg is command name
* ------------------------------------------------------------------------- */
int argIndexOfFirstArg(int objc, Tcl_Obj * CONST objv[],
- char **params, int *Nparams)
+ CONST char **params, int *Nparams)
{
int pos = -1;
@@ -235,7 +235,7 @@
* param: i ==> -postdata a b c --> first arg is i + 1 +
3
*/
if ((pidx =
- argPosParam(params, Tcl_GetString(objv[pos]))) != -1) {
+ argPosParam(params, (CONST char
*)Tcl_GetString(objv[pos]))) != -1) {
if (Nparams != NULL)
pos += Nparams[pidx];
else
@@ -263,7 +263,7 @@
* 3: key to search for
* R: TCL_OK if found, TCL_ERROR else
* ------------------------------------------------------------------------- */
-int argKeyExists(int objc, Tcl_Obj * CONST objv[], char *key)
+int argKeyExists(int objc, Tcl_Obj * CONST objv[], CONST char *key)
{
if (argIndexOfKey(objc, objv, key) == -1) {
@@ -281,7 +281,7 @@
* 3: key to search for
* R: Tcl_Obj* if found, else NULL
* ------------------------------------------------------------------------- */
-Tcl_Obj *argValueOfKey(int objc, Tcl_Obj * CONST objv[], char *key)
+Tcl_Obj *argValueOfKey(int objc, Tcl_Obj * CONST objv[], CONST char *key)
{
int pos = 0;
@@ -303,7 +303,7 @@
* (from 1 to min(objc,scanc)). If scanc == -1, scan up to objc.
* returns 0 if ok, index of argument which is unknown, if found
* ------------------------------------------------------------------------- */
-int argHasOnlyAccepted(int objc, Tcl_Obj * CONST objv[], char *params[],
+int argHasOnlyAccepted(int objc, Tcl_Obj * CONST objv[], CONST char *params[],
int scanc)
{
diff -ur websh-3.5.0.orig/src/generic/args.h websh-3.5.0/src/generic/args.h
--- websh-3.5.0.orig/src/generic/args.h Fri Oct 26 02:50:13 2001
+++ websh-3.5.0/src/generic/args.h Wed May 25 14:09:14 2005
@@ -23,16 +23,16 @@
#define OPTION_TYPE_DASHDASH 2
#define OPTION_TYPE_NUMBER 3
-int argIndexOfKey(int objc, Tcl_Obj * CONST objv[], char *key);
+int argIndexOfKey(int objc, Tcl_Obj * CONST objv[], CONST char *key);
int argIndexOfFirstOpt(int objc, Tcl_Obj * CONST objv[]);
int argIndexOfNextKey(int objc, Tcl_Obj * CONST objv[], int previous);
-int argKeyExists(int objc, Tcl_Obj * CONST objv[], char *key);
-Tcl_Obj *argValueOfKey(int objc, Tcl_Obj * CONST objv[], char *key);
-int argPosParam(char **params, char *key);
+int argKeyExists(int objc, Tcl_Obj * CONST objv[], CONST char *key);
+Tcl_Obj *argValueOfKey(int objc, Tcl_Obj * CONST objv[], CONST char *key);
+int argPosParam(CONST char **params, CONST char *key);
int argIndexOfFirstOpt(int objc, Tcl_Obj * CONST objv[]);
int argIndexOfFirstArg(int objc, Tcl_Obj * CONST objv[],
- char **params, int *Nparams);
-int argHasOnlyAccepted(int objc, Tcl_Obj * CONST objv[], char *params[],
+ CONST char **params, int *Nparams);
+int argHasOnlyAccepted(int objc, Tcl_Obj * CONST objv[], CONST char *params[],
int scanc);
int argOptionType(Tcl_Obj * in);
Only in websh-3.5.0/src/generic: args.h.org
diff -ur websh-3.5.0.orig/src/generic/cfg.c websh-3.5.0/src/generic/cfg.c
--- websh-3.5.0.orig/src/generic/cfg.c Thu Aug 1 07:21:52 2002
+++ websh-3.5.0/src/generic/cfg.c Wed May 25 14:20:48 2005
@@ -117,13 +117,13 @@
{
/* keep consistent with enum PutxMarkup in request.h */
- static char *putxMarkups[] = {
+ CONST static char *putxMarkups[] = {
"brace",
"tag",
NULL
};
- static char *subCmd1[] = {
+ CONST static char *subCmd1[] = {
"uploadfilesize",
"encryptchain",
"decryptchain",
diff -ur websh-3.5.0.orig/src/generic/conv.c websh-3.5.0/src/generic/conv.c
--- websh-3.5.0.orig/src/generic/conv.c Fri Oct 26 02:50:13 2001
+++ websh-3.5.0/src/generic/conv.c Wed May 25 14:09:14 2005
@@ -76,7 +76,7 @@
Tcl_Obj *res = NULL;
int useNumeric = TCL_ERROR;
int iCurArg = 0;
- static char *params[] = { "-numeric", NULL };
+ static CONST char *params[] = { "-numeric", NULL };
enum params
{ NUMERIC };
diff -ur websh-3.5.0.orig/src/generic/dispatch.c
websh-3.5.0/src/generic/dispatch.c
--- websh-3.5.0.orig/src/generic/dispatch.c Tue Jul 16 20:35:29 2002
+++ websh-3.5.0/src/generic/dispatch.c Wed May 25 14:21:05 2005
@@ -38,7 +38,7 @@
{
RequestData *requestData = NULL;
- char *params[] = { "-track",
+ CONST char *params[] = { "-track",
"-querystring",
"-postdata",
"-cmd",
diff -ur websh-3.5.0.orig/src/generic/filecounter.c
websh-3.5.0/src/generic/filecounter.c
--- websh-3.5.0.orig/src/generic/filecounter.c Wed Apr 17 20:27:37 2002
+++ websh-3.5.0/src/generic/filecounter.c Wed May 25 14:09:14 2005
@@ -50,10 +50,10 @@
{
SeqNoGenerator *seqnogen = (SeqNoGenerator *) clientData;
- static char *subCommands[] = { "curval", "nextval", "config", NULL };
+ static CONST char *subCommands[] = { "curval", "nextval", "config", NULL };
enum subCommands
{ CURVAL, NEXTVAL, CONFIG };
- char **ptr = subCommands;
+ CONST char **ptr = subCommands;
int idx;
int seqno;
@@ -162,7 +162,7 @@
SeqNoGenerator *seqnogen = NULL;
Tcl_Obj *result = NULL;
Tcl_CmdInfo cmdInfo;
- static char *params[] = { "-filename", "-seed", "-min", "-max",
+ static CONST char *params[] = { "-filename", "-seed", "-min", "-max",
"-incr", "-perms", "-wrap", NULL
};
enum params
diff -ur websh-3.5.0.orig/src/generic/formdata.c
websh-3.5.0/src/generic/formdata.c
--- websh-3.5.0.orig/src/generic/formdata.c Thu Mar 28 04:08:37 2002
+++ websh-3.5.0/src/generic/formdata.c Wed May 25 14:09:14 2005
@@ -41,6 +41,7 @@
int readToEnd = 0;
int content_length = 0;
Tcl_DString translation;
+ Tcl_DString encoding;
channel = Web_GetChannelOrVarChannel(interp, channelName, &mode);
if (channel == NULL) {
@@ -63,7 +64,9 @@
}
Tcl_DStringInit(&translation);
+ Tcl_DStringInit(&encoding);
Tcl_GetChannelOption(interp, channel, "-translation", &translation);
+ Tcl_GetChannelOption(interp, channel, "-encoding", &encoding);
Tcl_SetChannelOption(interp, channel, "-translation", "binary");
/* ------------------------------------------------------------------------
@@ -88,7 +91,9 @@
if (Tcl_GetIntFromObj(interp, len, &content_length) != TCL_OK) {
Tcl_SetChannelOption(interp, channel, "-translation",
Tcl_DStringValue(&translation));
+ Tcl_SetChannelOption(interp, channel, "-encoding",
Tcl_DStringValue(&encoding));
Tcl_DStringFree(&translation);
+ Tcl_DStringFree(&encoding);
/* unregister if was a varchannel */
Web_UnregisterVarChannel(interp, channelName, channel);
return TCL_ERROR;
@@ -122,7 +127,9 @@
Tcl_DecrRefCount(formData);
Tcl_SetChannelOption(interp, channel, "-translation",
Tcl_DStringValue(&translation));
+ Tcl_SetChannelOption(interp, channel, "-encoding",
Tcl_DStringValue(&encoding));
Tcl_DStringFree(&translation);
+ Tcl_DStringFree(&encoding);
/* unregister if was a varchannel */
Web_UnregisterVarChannel(interp, channelName, channel);
@@ -131,7 +138,9 @@
}
Tcl_SetChannelOption(interp, channel, "-translation",
Tcl_DStringValue(&translation));
+ Tcl_SetChannelOption(interp, channel, "-encoding",
Tcl_DStringValue(&encoding));
Tcl_DStringFree(&translation);
+ Tcl_DStringFree(&encoding);
/* unregister if was a varchannel */
Web_UnregisterVarChannel(interp, channelName, channel);
diff -ur websh-3.5.0.orig/src/generic/htmlify.c
websh-3.5.0/src/generic/htmlify.c
--- websh-3.5.0.orig/src/generic/htmlify.c Fri Oct 26 02:50:13 2001
+++ websh-3.5.0/src/generic/htmlify.c Wed May 25 14:09:14 2005
@@ -346,12 +346,12 @@
/* ----------------------------------------------------------------------------
* findCmtClose
* ------------------------------------------------------------------------- */
-char *findHtmlCmtClose(char *utf)
+CONST char *findHtmlCmtClose(CONST char *utf)
{
- char *cmtclose = NULL;
- char *next1 = NULL;
- char *next2 = NULL;
+ CONST char *cmtclose = NULL;
+ CONST char *next1 = NULL;
+ CONST char *next2 = NULL;
if (utf == NULL)
return NULL;
@@ -382,12 +382,12 @@
{
int len = 0;
- char *utf = NULL;
- char *cmtopen = NULL;
- char *cmtclose = NULL;
- char *next1 = NULL;
- char *next2 = NULL;
- char *next3 = NULL;
+ CONST char *utf = NULL;
+ CONST char *cmtopen = NULL;
+ CONST char *cmtclose = NULL;
+ CONST char *next1 = NULL;
+ CONST char *next2 = NULL;
+ CONST char *next3 = NULL;
if ((in == NULL) || (res == NULL))
return TCL_ERROR;
diff -ur websh-3.5.0.orig/src/generic/log.c websh-3.5.0/src/generic/log.c
--- websh-3.5.0.orig/src/generic/log.c Thu Mar 21 02:41:47 2002
+++ websh-3.5.0/src/generic/log.c Wed May 25 14:09:14 2005
@@ -370,13 +370,13 @@
int idx;
int iCurArg;
- static char *params[] = { "-maxchar",
+ static CONST char *params[] = { "-maxchar",
"-format",
NULL
};
enum params
{ MAXCHAR, FORMAT };
- static char *subCommands[] = { WEB_LOG_SUBCMD_ADD,
+ static CONST char *subCommands[] = { WEB_LOG_SUBCMD_ADD,
WEB_LOG_SUBCMD_DELETE,
WEB_LOG_SUBCMD_NAMES, NULL
};
@@ -642,7 +642,7 @@
LogData *logData;
int idx;
- static char *subCommands[] = {
+ static CONST char *subCommands[] = {
WEB_LOG_SUBCMD_ADD,
WEB_LOG_SUBCMD_DELETE,
WEB_LOG_SUBCMD_NAMES,
@@ -874,8 +874,8 @@
* <level> webshell log level
* <msg> message parts (NULL-terminated list)
* ------------------------------------------------------------------------- */
-void LOG_MSG(Tcl_Interp * interp, int flag, char *filename, int linenr,
- char *cmd, char *level, char *msg, ...)
+void LOG_MSG(Tcl_Interp * interp, int flag, CONST char *filename, int linenr,
+ CONST char *cmd, CONST char *level, CONST char *msg, ...)
{
Tcl_Obj *errobj = NULL;
@@ -922,7 +922,7 @@
#endif
if ((flag & INTERP_ERRORINFO) && (interp != NULL)) {
- char *errorInfo = Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY);
+ CONST char *errorInfo = Tcl_GetVar(interp, "errorInfo",
TCL_GLOBAL_ONLY);
if (errorInfo != NULL)
webLog(interp, WEBLOG_DEBUG, errorInfo);
else
diff -ur websh-3.5.0.orig/src/generic/log.h websh-3.5.0/src/generic/log.h
--- websh-3.5.0.orig/src/generic/log.h Thu Feb 14 02:44:22 2002
+++ websh-3.5.0/src/generic/log.h Wed May 25 14:09:14 2005
@@ -188,14 +188,15 @@
* ------------------------------------------------------------------------- */
char *getSeverityName(Severity aSeverity);
LogLevel *parseLogLevel(Tcl_Interp * interp,
- char *definition, char *defaultfacility, int cnt);
+ CONST char *definition,
+ CONST char *defaultfacility, int cnt);
Tcl_Obj *formatMessage(LogLevel * level, char *fmt, long maxCharInMsg,
Tcl_Obj * msg);
int doesPass(LogLevel * level, LogLevel * filter);
int doesPassFilters(LogLevel * logLevel, Tcl_HashTable * hash);
int logImpl(Tcl_Interp * interp, LogData * logData,
- char *levelStr, Tcl_Obj * msg);
-int webLog(Tcl_Interp * interp, char *levelStr, char *msg);
+ CONST char *levelStr, Tcl_Obj * msg);
+int webLog(Tcl_Interp * interp, CONST char *levelStr, CONST char *msg);
void sendMsgToDestList(Tcl_Interp * interp,
LogData * logData, LogLevel * level, Tcl_Obj * msg);
@@ -215,7 +216,7 @@
LOG_MSG(,0,...) --> don't do this
*/
-void LOG_MSG(Tcl_Interp * interp, int flag, char *filename, int linenr,
- char *cmd, char *level, char *msg, ...);
+void LOG_MSG(Tcl_Interp * interp, int flag, CONST char *filename, int linenr,
+ CONST char *cmd, CONST char *level, CONST char *msg, ...);
#endif
diff -ur websh-3.5.0.orig/src/generic/logutl.c websh-3.5.0/src/generic/logutl.c
--- websh-3.5.0.orig/src/generic/logutl.c Thu Mar 7 20:09:33 2002
+++ websh-3.5.0/src/generic/logutl.c Wed May 25 14:09:14 2005
@@ -42,7 +42,7 @@
* 1: something like "websh.info"
* 2: string to log
* ------------------------------------------------------------------------- */
-int webLog(Tcl_Interp * interp, char *levelStr, char *msg)
+int webLog(Tcl_Interp * interp, CONST char *levelStr, CONST char *msg)
{
LogData *logData = NULL;
@@ -82,7 +82,7 @@
* R: TCL_OK in any case
* ------------------------------------------------------------------------- */
int logImpl(Tcl_Interp * interp, LogData * logData,
- char *levelStr, Tcl_Obj * msg)
+ CONST char *levelStr, Tcl_Obj * msg)
{
LogLevel *logLevel = NULL;
@@ -230,7 +230,7 @@
/* ----------------------------------------------------------------------------
* getLogSeverity -- convert name to enum using first char of name for speed
* ------------------------------------------------------------------------- */
-Severity getLogSeverity(char *name)
+Severity getLogSeverity(CONST char *name)
{
if (name == NULL)
@@ -274,16 +274,17 @@
* cnt -> for naming of filters (-1 if log-level)
* ------------------------------------------------------------------------- */
LogLevel *parseLogLevel(Tcl_Interp * interp,
- char *definition, char *defaultfacility, int cnt)
+ CONST char *definition,
+ CONST char *defaultfacility, int cnt)
{
LogLevel *result = NULL;
char *facility = NULL;
- char *levelname = NULL;
+ CONST char *levelname = NULL;
char *dot;
char *dash;
- char *tolevelname = NULL;
- char *fromlevelname = NULL;
+ CONST char *tolevelname = NULL;
+ CONST char *fromlevelname = NULL;
Severity fromlevel, tolevel;
int len;
diff -ur websh-3.5.0.orig/src/generic/messages.c
websh-3.5.0/src/generic/messages.c
--- websh-3.5.0.orig/src/generic/messages.c Fri Apr 5 20:54:50 2002
+++ websh-3.5.0/src/generic/messages.c Wed May 25 14:09:14 2005
@@ -118,7 +118,7 @@
int mode = 0;
Tcl_DString ds;
char *data = NULL;
- char *res = NULL;
+ CONST char *res = NULL;
int cmdcode = 0;
int flags = 0;
int size = 0;
@@ -226,7 +226,7 @@
int parseFlags(Tcl_Interp * interp, char *flaglist, int *flags)
{
- char **argv;
+ CONST char **argv;
int argc;
int count;
Tcl_DString ds;
diff -ur websh-3.5.0.orig/src/generic/mod_websh.c
websh-3.5.0/src/generic/mod_websh.c
--- websh-3.5.0.orig/src/generic/mod_websh.c Thu Apr 18 23:40:11 2002
+++ websh-3.5.0/src/generic/mod_websh.c Wed May 25 14:14:25 2005
@@ -203,7 +203,7 @@
(websh_server_conf *) ap_get_module_config(s->module_config,
&websh_module);
if (!initPool(conf)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, NULL, s,
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
"Could not init interp pool\n");
return;
}
@@ -314,7 +314,7 @@
if (res != TCL_OK) {
- char *errorInfo = NULL;
+ CONST char *errorInfo = NULL;
errorInfo =
Tcl_GetVar(webInterp->interp, "errorInfo", TCL_GLOBAL_ONLY);
logToAp(webInterp->interp, NULL, errorInfo);
diff -ur websh-3.5.0.orig/src/generic/modwebsh_ap.c
websh-3.5.0/src/generic/modwebsh_ap.c
--- websh-3.5.0.orig/src/generic/modwebsh_ap.c Thu Apr 18 23:40:11 2002
+++ websh-3.5.0/src/generic/modwebsh_ap.c Wed May 25 14:09:14 2005
@@ -184,7 +184,7 @@
int index;
- static char *interpParams[] = {
+ static CONST char *interpParams[] = {
"numrequests",
"starttime",
"lastusedtime",
@@ -272,7 +272,7 @@
WebInterpClass *webInterpClass = NULL;
int index;
- static char *classParams[] = { "maxttl", "maxidletime", "maxrequests" };
+ static CONST char *classParams[] = { "maxttl", "maxidletime",
"maxrequests" };
enum params
{ CLASS_TTL, CLASS_IDLETIME, CLASS_REQUESTS };
@@ -437,7 +437,7 @@
/* these options should be in sync with the options in Web_Cfg
* not the order or anything, but the actual text strings */
- static char *subCmd[] = {
+ static CONST char *subCmd[] = {
"script",
"server_root",
"document_root",
diff -ur websh-3.5.0.orig/src/generic/paramlist.c
websh-3.5.0/src/generic/paramlist.c
--- websh-3.5.0.orig/src/generic/paramlist.c Thu Mar 21 01:02:54 2002
+++ websh-3.5.0/src/generic/paramlist.c Wed May 25 14:09:14 2005
@@ -32,7 +32,7 @@
* the values from static table paramsubcmd.
* ------------------------------------------------------------------------- */
int paramGetIndexFromObj(Tcl_Interp * interp, Tcl_Obj * obj, char **tablePtr,
- char *msg, int flags, int *indexPtr)
+ CONST char *msg, int flags, int *indexPtr)
{
char **allopts = NULL;
diff -ur websh-3.5.0.orig/src/generic/paramlist.h
websh-3.5.0/src/generic/paramlist.h
--- websh-3.5.0.orig/src/generic/paramlist.h Fri Oct 26 02:50:13 2001
+++ websh-3.5.0/src/generic/paramlist.h Wed May 25 14:09:14 2005
@@ -39,7 +39,7 @@
int paramGetIndexFromObj(Tcl_Interp * interp,
Tcl_Obj * obj,
char **tablePtr,
- char *msg, int flags, int *indexPtr);
+ CONST char *msg, int flags, int *indexPtr);
Tcl_Obj *paramListGetObject(Tcl_Interp * interp,
ParamList * paramList, Tcl_Obj * key);
diff -ur websh-3.5.0.orig/src/generic/request.c
websh-3.5.0/src/generic/request.c
--- websh-3.5.0.orig/src/generic/request.c Thu Jul 25 19:10:22 2002
+++ websh-3.5.0/src/generic/request.c Wed May 25 14:09:14 2005
@@ -317,7 +317,7 @@
Tcl_Obj *tclo = NULL;
RequestData *requestData = NULL;
- static char *params[] = { "-path", "-prefix", "-remove", NULL };
+ static CONST char *params[] = { "-path", "-prefix", "-remove", NULL };
enum params
{ PATH, PREFIX, REMOVE };
int idx = -1;
diff -ur websh-3.5.0.orig/src/generic/uricode.c
websh-3.5.0/src/generic/uricode.c
--- websh-3.5.0.orig/src/generic/uricode.c Sat Dec 29 01:47:58 2001
+++ websh-3.5.0/src/generic/uricode.c Wed May 25 14:09:14 2005
@@ -139,7 +139,7 @@
int length;
Tcl_Obj *res = NULL;
- char *utf = NULL;
+ CONST char *utf = NULL;
Tcl_UniChar unic;
char buf[3];
diff -ur websh-3.5.0.orig/src/generic/url.c websh-3.5.0/src/generic/url.c
--- websh-3.5.0.orig/src/generic/url.c Tue Feb 12 18:36:29 2002
+++ websh-3.5.0/src/generic/url.c Wed May 25 14:09:14 2005
@@ -472,7 +472,7 @@
Tcl_Interp * interp, int objc, Tcl_Obj * CONST objv[])
{
- static char *params[] = { "-urlformat",
+ static CONST char *params[] = { "-urlformat",
"-notimestamp", NULL
};
enum params
diff -ur websh-3.5.0.orig/src/generic/varchannel.c
websh-3.5.0/src/generic/varchannel.c
--- websh-3.5.0.orig/src/generic/varchannel.c Fri Oct 26 02:50:13 2001
+++ websh-3.5.0/src/generic/varchannel.c Wed May 25 14:13:34 2005
@@ -95,7 +95,7 @@
* output to var channel
* ------------------------------------------------------------------------- */
int varchannelOutputProc(ClientData clientData,
- char *buf, int toWrite, int *errorCodePtr)
+ CONST char *buf, int toWrite, int *errorCodePtr)
{
VarChannel *varChannel = NULL;
diff -ur websh-3.5.0.orig/src/generic/weboutint.c
websh-3.5.0/src/generic/weboutint.c
--- websh-3.5.0.orig/src/generic/weboutint.c Thu Jul 25 23:27:57 2002
+++ websh-3.5.0/src/generic/weboutint.c Wed May 25 14:23:29 2005
@@ -416,130 +416,101 @@
int webout_eval_tag(Tcl_Interp * interp, ResponseObj * responseObj,
Tcl_Obj * in, const char *strstart, const char *strend)
{
- Tcl_DString dstr;
- Tcl_DString convdstr;
- Tcl_Obj *tclo = NULL;
-
- int inLen;
- char *cur = NULL;
- char *prev = NULL;
- int cntOpen = 0;
+ char *next;
+ char *cur;
+ int endseqlen = strlen(strend);
+ int startseqlen = strlen(strstart);
+ int inside = 0, p = 0;
+ int inLen = 0;
+ Tcl_Obj *outbuf;
int res = 0;
- int startmatch = 0;
- int endmatch = 0;
-
- int begin = 1;
- char *start;
-
-/* const char *strstart = START_TAG;
- const char *strend = END_TAG; */
-/* int endseqlen = strlen(END_TAG);
- int startseqlen = strlen(START_TAG);
- */
- int endseqlen = strlen(strstart);
- int startseqlen = strlen(strend);
if ((responseObj == NULL) || (in == NULL))
return TCL_ERROR;
- Tcl_DStringInit(&dstr);
-
- cur = Tcl_GetStringFromObj(in, &inLen);
- prev = cur;
- start = cur;
+ next = Tcl_GetStringFromObj(in, &inLen);
if (inLen == 0)
- return TCL_OK;
-
- while (*cur != 0) {
- if (*cur == strstart[startmatch])
+ return TCL_OK;
+
+ outbuf = Tcl_NewStringObj("web::put \"", -1);
+
+ while (*next != 0)
+ {
+ cur = next;
+ next = (char *)Tcl_UtfNext(cur);
+ if (!inside)
{
- if (*prev == '\\') {
- Tcl_DStringAppend(&dstr, cur, 1);
- } else if ((++startmatch) == startseqlen) {
- /* We have matched the starting sequence. */
- if (cntOpen < 1) {
- if (!((cur - (startseqlen - 1)) - start)) {
- begin = 0;
- } else {
- Tcl_DStringAppend(&dstr, "\"\n", 2);
- }
- } else {
- Tcl_DStringAppend(&dstr, strstart, -1);
- }
- cntOpen ++;
- startmatch = 0;
- }
- prev = cur;
- cur ++;
- continue;
- } else if (*cur == strend[endmatch]) {
- if (*prev == '\\') {
- Tcl_DStringAppend(&dstr, cur, 1);
- } else if ((++endmatch) == endseqlen)
+ /* Outside the delimiting tags. */
+ if (*cur == strstart[p])
{
- /* We have matched the ending sequence. */
- if (cntOpen == 1) {
- /* build up the command with the name of the channel. */
- Tcl_DStringAppend(&dstr, "\n web::put \"", -1);
- } else {
- Tcl_DStringAppend(&dstr, strend, -1);
+ if ((++p) == startseqlen)
+ {
+ // We have matched the whole ending sequence.
+ Tcl_AppendToObj(outbuf, "\"\n", 2);
+ inside = 1;
+ p = 0;
+ continue;
}
- cntOpen --;
- endmatch = 0;
- }
- prev = cur;
- cur ++;
- continue;
- } else if (startmatch) {
- if (cntOpen < 1) {
- quote_append(&dstr, (char *)strstart, startmatch);
} else {
- Tcl_DStringAppend(&dstr, (char *)strstart, startmatch);
+ if (p > 0) {
+ Tcl_AppendToObj(outbuf, (char *)strstart, p);
+ p = 0;
+ }
+ // or else just put the char in outbuf
+ switch (*cur)
+ {
+ case '{':
+ Tcl_AppendToObj(outbuf, "\\{", 2);
+ break;
+ case '}':
+ Tcl_AppendToObj(outbuf, "\\}", 2);
+ break;
+ case '$':
+ Tcl_AppendToObj(outbuf, "\\$", 2);
+ break;
+ case '[':
+ Tcl_AppendToObj(outbuf, "\\[", 2);
+ break;
+ case ']':
+ Tcl_AppendToObj(outbuf, "\\]", 2);
+ break;
+ case '"':
+ Tcl_AppendToObj(outbuf, "\\\"", 2);
+ break;
+ case '\\':
+ Tcl_AppendToObj(outbuf, "\\\\", 2);
+ break;
+ default:
+ Tcl_AppendToObj(outbuf, cur, next - cur);
+ break;
+ }
+ continue;
}
- startmatch = 0;
- } else if (endmatch) {
- if (cntOpen < 1) {
- quote_append(&dstr, (char *)strend, endmatch);
+ } else {
+ // Inside the delimiting tags.
+
+ if (*cur == strend[p])
+ {
+ if ((++p) == endseqlen)
+ {
+ Tcl_AppendToObj(outbuf, "\nweb::put \"", -1);
+ inside = 0;
+ p = 0;
+ }
} else {
- Tcl_DStringAppend(&dstr, (char *)strend, endmatch);
+ // Plop stuff into outbuf, which we will then eval.
+ if (p > 0) {
+ Tcl_AppendToObj(outbuf, (char *)strend, p);
+ p = 0;
+ }
+ Tcl_AppendToObj(outbuf, cur, next - cur);
}
- endmatch = 0;
}
- /* Put the current character in the output. If we are in Tcl
- code, then don't escape Tcl characters. */
- if (cntOpen < 1) {
- quote_append(&dstr, cur, 1);
- } else {
- Tcl_DStringAppend(&dstr, cur, 1);
- }
- prev = cur;
- cur ++;
- }
-
- Tcl_ExternalToUtfDString(NULL,
- Tcl_DStringValue(&dstr),
- Tcl_DStringLength(&dstr),
- &convdstr);
-
- /* build up the web::put with the name of the channel. */
- if (begin) {
- tclo = Tcl_NewStringObj("web::put \"", -1);
- } else {
- tclo = Tcl_NewStringObj("", -1);
- }
-
- Tcl_AppendToObj(tclo, Tcl_DStringValue(&convdstr),
- Tcl_DStringLength(&convdstr));
-
- if (cntOpen < 1) {
- Tcl_AppendToObj(tclo, "\"\n", 2);
}
-
- Tcl_DStringFree(&dstr);
- Tcl_DStringFree(&convdstr);
- res = Tcl_EvalObjEx(interp, tclo, TCL_EVAL_DIRECT);
- return res;
+ Tcl_AppendToObj(outbuf, "\"", 1);
+ res = Tcl_EvalObjEx(interp, outbuf, TCL_EVAL_DIRECT);
+ return (res);
}
/* ----------------------------------------------------------------------------
diff -ur websh-3.5.0.orig/src/tests/mintest.test
websh-3.5.0/src/tests/mintest.test
--- websh-3.5.0.orig/src/tests/mintest.test Thu Oct 25 20:04:29 2001
+++ websh-3.5.0/src/tests/mintest.test Wed May 25 14:09:14 2005
@@ -35,8 +35,8 @@
close $fh
set res ""
catch {
- ## fixme: use variable for tclsh8.3
- set res [exec tclsh8.3 $fn]
+ ## fixme: use variable for tclsh8.4
+ set res [exec tclsh8.4 $fn]
}
file delete -force $fn
set res
Only in websh-3.5.0/src/unix: Makefile
diff -ur websh-3.5.0.orig/src/unix/Makefile.in websh-3.5.0/src/unix/Makefile.in
--- websh-3.5.0.orig/src/unix/Makefile.in Fri Aug 2 02:17:10 2002
+++ websh-3.5.0/src/unix/Makefile.in Wed May 25 15:47:27 2005
@@ -175,7 +175,7 @@
INCLUDES = @TCL_INCLUDES@ $(HTTPD_INCLUDES)
-EXTRA_CFLAGS = $(TCL_DEFS) $(PROTO_FLAGS) $(SECURITY_FLAGS) $(MEM_DEBUG_FLAGS)
$(KEYSYM_FLAGS) $(NO_DEPRECATED_FLAGS)
+EXTRA_CFLAGS = $(TCL_DEFS) $(PROTO_FLAGS) $(SECURITY_FLAGS) $(MEM_DEBUG_FLAGS)
$(KEYSYM_FLAGS) $(NO_DEPRECATED_FLAGS) $(TCL_EXTRA_CFLAGS)
DEFS = @DEFS@ $(EXTRA_CFLAGS)
@@ -290,7 +290,7 @@
websh$(VERSION): tclAppInit.$(OBJEXT) $(web_OBJECTS)
$(CC) @LDFLAGS@ tclAppInit.$(OBJEXT) $(web_OBJECTS) \
- $(TCL_LIB_SPEC) $(TCL_LIBS) -o websh$(VERSION)
+ $(TCL_LIB_SPEC) $(TCL_LIBS) $(TCL_LD_FLAGS) -o websh$(VERSION)
mod_websh$(SHARED_LIB_SUFFIX): $(web_ap_OBJECTS)
@@ -385,15 +385,34 @@
# =============================================================================
install-doc: doc
- $(mkinstalldirs) $(DESTDIR)/doc
- @for i in quickref.html quickref.txt ; \
+ $(mkinstalldirs) $(DESTDIR)/doc/html
+ @for i in Apache_module_specific_commands.html \
+ command_dispatching_and_session_management.html \
+ configuration.html \
+ context_handling.html \
+ data_encryption.html \
+ file_handling_and_file_IO.html \
+ index.html \
+ inter-process_and_-system_communication.html \
+ logging.html \
+ misc_commands.html \
+ request_data_handling.html \
+ response_data_handling.html \
+ uri-html-_en-decoding.html ; \
+ do \
+ echo "Installing $$i"; \
+ rm -f $(DESTDIR)/doc/html/$$i; \
+ $(INSTALL_DATA) ../../doc/html/$$i $(DESTDIR)/doc/html/$$i ; \
+ chmod 444 $(DESTDIR)/doc/html/$$i; \
+ done
+ @for i in INSTALL README ; \
do \
echo "Installing $$i"; \
rm -f $(DESTDIR)/doc/$$i; \
- $(INSTALL_DATA) ../../doc/$$i $(DESTDIR)/doc/$$i ; \
+ $(INSTALL_DATA) ../../$$i $(DESTDIR)/doc/$$i ; \
chmod 444 $(DESTDIR)/doc/$$i; \
done
- @for i in README license.terms ChangeLog changes ; \
+ @for i in ChangeLog license.terms ; \
do \
echo "Installing $$i"; \
rm -f $(DESTDIR)/doc/$$i; \
Only in websh-3.5.0/src/unix: config.status
Only in websh-3.5.0/src/unix: configure
diff -ur websh-3.5.0.orig/src/unix/configure.in
websh-3.5.0/src/unix/configure.in
--- websh-3.5.0.orig/src/unix/configure.in Thu Aug 1 23:03:56 2002
+++ websh-3.5.0/src/unix/configure.in Wed May 25 14:09:14 2005
@@ -318,7 +318,7 @@
# set VARIABLE to the entire path of the program found.
AC_PATH_PROGS(TCLSH_PROG, \
- tclsh8.3${EXEEXT} tclsh83${EXEEXT} tclsh8.2${EXEEXT} tclsh82${EXEEXT}, :, \
+ tclsh8.4${EXEEXT} tclsh84${EXEEXT} tclsh8.3${EXEEXT} tclsh83${EXEEXT}
tclsh8.2${EXEEXT} tclsh82${EXEEXT}, :, \
:${TCL_PACKAGE_PATH}/../bin:.:${prefix}:${exec_prefix}:${PATH})
if test "x${TCLSH_PROG}" = "x:" ; then
Only in websh-3.5.0/src/unix: configure.lineno
--- websh-3.5.0/src/generic/formdata.c~ Wed May 25 14:09:14 2005
+++ websh-3.5.0/src/generic/formdata.c Thu May 26 13:26:11 2005
@@ -561,7 +561,7 @@
* open file
* -----------------------------------------------------------------------
*/
if ((out = Tcl_OpenFileChannel(NULL, Tcl_GetString(tmpFileName),
- "w", 0644)) == NULL)
+ "w", 0600)) == NULL)
return 0;
/*
--------------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]