You are viewing a plain text version of this content. The canonical link for it is here.
Posted to websh-cvs@tcl.apache.org by ro...@apache.org on 2007/09/04 18:59:45 UTC
svn commit: r572736 - in /tcl/websh/trunk: ./ src/ src/generic/
Author: ronnie
Date: Tue Sep 4 09:59:43 2007
New Revision: 572736
URL: http://svn.apache.org/viewvc?rev=572736&view=rev
Log:
- Lots of Tcl_{Incr|Decr}RefCount() fixes
Modified:
tcl/websh/trunk/CHANGES
tcl/websh/trunk/src/ChangeLog
tcl/websh/trunk/src/generic/checksum.c
tcl/websh/trunk/src/generic/dispatch.c
tcl/websh/trunk/src/generic/filecounter.c
tcl/websh/trunk/src/generic/formdata.c
tcl/websh/trunk/src/generic/htmlify.c
tcl/websh/trunk/src/generic/interpool.c
tcl/websh/trunk/src/generic/logutl.c
tcl/websh/trunk/src/generic/messages.c
tcl/websh/trunk/src/generic/modwebsh_cgi.c
tcl/websh/trunk/src/generic/nca_d.c
tcl/websh/trunk/src/generic/paramlist.c
tcl/websh/trunk/src/generic/querystring.c
tcl/websh/trunk/src/generic/request.c
tcl/websh/trunk/src/generic/uricode.c
tcl/websh/trunk/src/generic/url.c
tcl/websh/trunk/src/generic/varchannel.c
tcl/websh/trunk/src/generic/webout.c
tcl/websh/trunk/src/generic/weboutint.c
tcl/websh/trunk/src/generic/webutl.c
Modified: tcl/websh/trunk/CHANGES
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/CHANGES?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/CHANGES (original)
+++ tcl/websh/trunk/CHANGES Tue Sep 4 09:59:43 2007
@@ -9,6 +9,8 @@
Trunk
-----
+- Bug fixes regarding wrng usage of Tcl API
+
- Bug fix when handling multipart forms (Bug 43212)
- Better logging when mod_websh cannot get a Tcl interpreter for a request
Modified: tcl/websh/trunk/src/ChangeLog
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/ChangeLog?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/ChangeLog (original)
+++ tcl/websh/trunk/src/ChangeLog Tue Sep 4 09:59:43 2007
@@ -1,3 +1,16 @@
+2007-09-04 Brunner Ronnie <ro...@netcetera.ch>
+ * src/generic/dispatch.c, src/generic/webutl.c, src/generic/logutl.c,
+ src/generic/htmlify.c, src/generic/varchannel.c,
+ src/generic/modwebsh_cgi.c, src/generic/formdata.c,
+ src/generic/checksum.c, src/generic/interpool.c,
+ src/generic/weboutint.c, src/generic/request.c,
+ src/generic/nca_d.c, src/generic/uricode.c,
+ src/generic/querystring.c, src/generic/url.c, src/generic/webout.c,
+ src/generic/messages.c, src/generic/filecounter.c,
+ src/generic/paramlist.c:
+ - Fixed lots of potentially wrong/missing Tcl_IncrRefCount() and
+ Tcl_DecrRefCount() calls.
+
2007-08-28 Brunner Ronnie <ro...@netcetera.ch>
* src/generic/webutl.c, src/test/dispatch.test:
- properly handle multi part forms with extended content-type
Modified: tcl/websh/trunk/src/generic/checksum.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/checksum.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/checksum.c (original)
+++ tcl/websh/trunk/src/generic/checksum.c Tue Sep 4 09:59:43 2007
@@ -155,12 +155,14 @@
return NULL;
crcObj = Tcl_GetRange(in, len - 4, len - 1);
+ Tcl_IncrRefCount(crcObj);
crc1 = crcDeAsciify(crcObj);
Tcl_DecrRefCount(crcObj);
crcObj = Tcl_GetRange(in, 0, len - 5);
+ Tcl_IncrRefCount(crcObj);
crc2 = crcCalc(crcObj);
@@ -191,6 +193,8 @@
if (tmp2 == NULL)
return TCL_ERROR;
+
+ Tcl_IncrRefCount(tmp2);
Tcl_AppendObjToObj(in, tmp2);
Modified: tcl/websh/trunk/src/generic/dispatch.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/dispatch.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/dispatch.c (original)
+++ tcl/websh/trunk/src/generic/dispatch.c Tue Sep 4 09:59:43 2007
@@ -92,15 +92,20 @@
* ----------------------------------------------------------------------- */
if (query_string != NULL) {
+ Tcl_IncrRefCount(query_string);
+
/* ------------------------------------------------------------------------
* empty string means: skip
* --------------------------------------------------------------------- */
if (Tcl_GetCharLength(query_string) > 0) {
if (parseQueryString(requestData, interp, query_string) ==
- TCL_ERROR)
+ TCL_ERROR) {
+ Tcl_DecrRefCount(query_string);
return TCL_ERROR;
+ }
}
+ Tcl_DecrRefCount(query_string);
}
/* ==========================================================================
@@ -191,6 +196,8 @@
Tcl_Obj *tmp = NULL;
tmp = requestGetDefaultChannelName();
+
+ Tcl_IncrRefCount(tmp);
parsePostData(interp, tmp, content_length, content_type,
requestData);
Modified: tcl/websh/trunk/src/generic/filecounter.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/filecounter.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/filecounter.c (original)
+++ tcl/websh/trunk/src/generic/filecounter.c Tue Sep 4 09:59:43 2007
@@ -371,6 +371,7 @@
* Try to read file
* ----------------------------------------------------------------- */
lineObj = Tcl_NewObj();
+ Tcl_IncrRefCount(lineObj);
if ((bytesRead = Tcl_GetsObj(channel, lineObj)) < 0) {
@@ -419,8 +420,6 @@
unlock_TclChannel(interp, channel);
Tcl_Close(interp, channel);
- Tcl_DecrRefCount(lineObj);
-
LOG_MSG(interp, WRITE_LOG | SET_RESULT,
__FILE__, __LINE__,
"web::filecounter", WEBLOG_ERROR,
@@ -428,6 +427,8 @@
"\" contains invalid data: ",
Tcl_GetStringResult(interp), NULL);
+ Tcl_DecrRefCount(lineObj);
+
return TCL_ERROR;
}
@@ -449,12 +450,12 @@
unlock_TclChannel(interp, channel);
Tcl_Close(interp, channel);
- Tcl_DecrRefCount(lineObj);
-
LOG_MSG(interp, WRITE_LOG | SET_RESULT,
__FILE__, __LINE__,
"web::filecounter", WEBLOG_ERROR,
"counter overflow", NULL);
+
+ Tcl_DecrRefCount(lineObj);
return TCL_ERROR;
}
Modified: tcl/websh/trunk/src/generic/formdata.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/formdata.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/formdata.c (original)
+++ tcl/websh/trunk/src/generic/formdata.c Tue Sep 4 09:59:43 2007
@@ -105,6 +105,7 @@
* ok, read
* --------------------------------------------------------------------- */
formData = Tcl_NewObj();
+ Tcl_IncrRefCount(formData);
if (readToEnd) {
@@ -174,7 +175,7 @@
* only add if list length > 0
* ----------------------------------------------------------------------- */
if ((listLen = tclGetListLength(interp, tclo)) == -1) {
- /* no Tcl_DecrRefCount(tclo); */
+ Tcl_DecrRefCount(tclo);
return TCL_ERROR;
}
@@ -287,6 +288,7 @@
pro = Tcl_NewObj();
if (pro == NULL)
return TCL_ERROR;
+ Tcl_IncrRefCount(pro);
mimeReadBody(channel, pro, boundary, &isLast);
/* printf("DBG prolog: %s\n",Tcl_GetString(pro)); fflush(stdout); */
Tcl_DecrRefCount(pro);
@@ -305,6 +307,7 @@
hdr = Tcl_NewObj();
if (hdr == NULL)
return TCL_ERROR;
+ Tcl_IncrRefCount(hdr);
mimeReadHeader(channel, hdr);
mimeContDispData =
mimeGetContDispFromHeader(interp, Tcl_GetString(hdr));
@@ -389,6 +392,7 @@
}
fileUploadList = Tcl_NewObj();
+ Tcl_IncrRefCount(fileUploadList);
Tcl_ListObjReplace(interp, fileUploadList, 0, 0, 4, lobjv);
if (paramListAdd(requestData->formVarList,
@@ -408,6 +412,7 @@
destroyMimeContDispData(mimeContDispData);
return TCL_ERROR;
}
+ Tcl_DecrRefCount(fileUploadList);
}
else {
@@ -419,6 +424,7 @@
destroyMimeContDispData(mimeContDispData);
return TCL_ERROR;
}
+ Tcl_IncrRefCount(bdy);
mimeReadBody(channel, bdy, boundary, &isLast);
/* printf("DBG mimeSplitMultipart - '%s' -> '%s'\n",mimeContDispData->name,Tcl_GetString(bdy)); fflush(stdout); */
@@ -436,7 +442,7 @@
Tcl_DecrRefCount(bdy);
return TCL_ERROR;
}
- /* NO Tcl_DecrRefCount(bdy); */
+ Tcl_DecrRefCount(bdy);
}
}
destroyMimeContDispData(mimeContDispData);
@@ -511,6 +517,7 @@
tclo = Tcl_NewObj();
first = TCL_OK;
+ Tcl_IncrRefCount(tclo);
while (Tcl_GetsObj(channel, tclo) != -1) {
@@ -534,6 +541,7 @@
Tcl_DecrRefCount(tclo);
tclo = Tcl_NewObj();
+ Tcl_IncrRefCount(tclo);
}
Tcl_DecrRefCount(tclo);
@@ -592,6 +600,7 @@
* first line
* ----------------------------------------------------------------------- */
prevline = Tcl_NewObj();
+ Tcl_IncrRefCount(prevline);
rBytesPrev = Tcl_GetsObj(in, prevline);
if (rBytesPrev != -1) {
@@ -600,6 +609,7 @@
* read line-by-line, write delayed
* --------------------------------------------------------------------- */
curline = Tcl_NewObj();
+ Tcl_IncrRefCount(curline);
while ((rBytes = Tcl_GetsObj(in, curline)) != -1) {
@@ -672,6 +682,7 @@
Tcl_DecrRefCount(prevline);
prevline = curline;
curline = Tcl_NewObj();
+ Tcl_IncrRefCount(curline);
rBytesPrev = rBytes;
}
Tcl_DecrRefCount(curline);
@@ -702,6 +713,7 @@
first = 1;
prevline = Tcl_NewObj();
+ Tcl_IncrRefCount(prevline);
if (Tcl_GetsObj(in, prevline) != -1) {
/* printf("DBG mimeReadBody - first line: %s\n",Tcl_GetString(prevline)); fflush(stdout); */
@@ -713,6 +725,7 @@
}
curline = Tcl_NewObj();
+ Tcl_IncrRefCount(curline);
while (Tcl_GetsObj(in, curline) != -1) {
@@ -743,6 +756,7 @@
Tcl_DecrRefCount(prevline);
prevline = curline;
curline = Tcl_NewObj();
+ Tcl_IncrRefCount(curline);
if (isBoundary)
break;
Modified: tcl/websh/trunk/src/generic/htmlify.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/htmlify.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/htmlify.c (original)
+++ tcl/websh/trunk/src/generic/htmlify.c Tue Sep 4 09:59:43 2007
@@ -34,6 +34,7 @@
intObj = Tcl_NewIntObj(num);
if (intObj != NULL) {
+ Tcl_IncrRefCount(intObj);
Tcl_AppendToObj(tclo, "&#", 2);
Tcl_AppendObjToObj(tclo, intObj);
Tcl_DecrRefCount(intObj);
@@ -236,6 +237,7 @@
/* use lookup table */ \
Tcl_Obj* iObj = NULL; \
Tcl_Obj* entity = Tcl_NewUnicodeObj(&(unic[first]),end-first); \
+ Tcl_IncrRefCount(entity); \
iObj = (Tcl_Obj *)getFromHashTable(convData->etu, \
Tcl_GetString(entity)); \
Tcl_DecrRefCount(entity); \
Modified: tcl/websh/trunk/src/generic/interpool.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/interpool.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/interpool.c (original)
+++ tcl/websh/trunk/src/generic/interpool.c Tue Sep 4 09:59:43 2007
@@ -342,6 +342,7 @@
}
idObj = Tcl_DuplicateObj(Tcl_GetObjResult(conf->mainInterp));
+ Tcl_IncrRefCount(idObj);
Tcl_ResetResult(conf->mainInterp);
/* get absolute filename (if already absolute, same as
@@ -749,6 +750,7 @@
Tcl_Interp *interp = webInterp->interp;
objPtr = Tcl_NewObj();
+ Tcl_IncrRefCount(objPtr);
chan = Tcl_OpenFileChannel(interp, filename, "r", 0644);
if (chan == (Tcl_Channel) NULL) {
Tcl_ResetResult(interp);
@@ -765,7 +767,6 @@
if (Tcl_Close(interp, chan) == TCL_OK) {
/* finally success ... */
webInterp->code = objPtr;
- Tcl_IncrRefCount(objPtr);
return TCL_OK;
}
}
Modified: tcl/websh/trunk/src/generic/logutl.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/logutl.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/logutl.c (original)
+++ tcl/websh/trunk/src/generic/logutl.c Tue Sep 4 09:59:43 2007
@@ -148,6 +148,7 @@
/* no, evaluate now */
subst = Tcl_NewStringObj("subst", 5);
+ Tcl_IncrRefCount(subst);
if (Tcl_ListObjAppendElement(NULL, subst, msg) !=
TCL_OK) {
@@ -158,7 +159,6 @@
}
else {
- Tcl_IncrRefCount(subst);
res =
Tcl_EvalObjEx(interp, subst,
TCL_EVAL_DIRECT);
@@ -179,6 +179,7 @@
logDest->format,
logDest->maxCharInMsg,
emsg);
+ Tcl_IncrRefCount(fmsg);
}
}
}
@@ -186,6 +187,7 @@
/* already evaluated. format */
fmsg = formatMessage(logLevel, logDest->format,
logDest->maxCharInMsg, emsg);
+ Tcl_IncrRefCount(fmsg);
}
}
@@ -196,15 +198,17 @@
* ------------------------------------------------------------- */
fmsg = formatMessage(logLevel, logDest->format,
logDest->maxCharInMsg, msg);
+ Tcl_IncrRefCount(fmsg);
}
/* ------------------------------------------------------------------
* fallback if subst did not work
* --------------------------------------------------------------- */
- if (err) {
+ if (fmsg == NULL) {
fmsg = formatMessage(logLevel, logDest->format,
logDest->maxCharInMsg, msg);
+ Tcl_IncrRefCount(fmsg);
}
/* ------------------------------------------------------------------
Modified: tcl/websh/trunk/src/generic/messages.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/messages.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/messages.c (original)
+++ tcl/websh/trunk/src/generic/messages.c Tue Sep 4 09:59:43 2007
@@ -158,17 +158,21 @@
return TCL_ERROR;
to = Tcl_NewIntObj(cmdcode);
+ Tcl_IncrRefCount(to);
if (Tcl_ObjSetVar2(interp, objv[2], NULL, to, TCL_LEAVE_ERR_MSG) == NULL) {
Tcl_DecrRefCount(to);
return TCL_ERROR;
}
+ Tcl_DecrRefCount(to);
to = Tcl_NewIntObj(flags);
+ Tcl_IncrRefCount(to);
if (Tcl_ObjSetVar2(interp, objv[4], NULL, to, TCL_LEAVE_ERR_MSG) == NULL) {
Tcl_DecrRefCount(to);
return TCL_ERROR;
}
+ Tcl_DecrRefCount(to);
Tcl_SetObjResult(interp, Tcl_NewIntObj(size));
return TCL_OK;
}
Modified: tcl/websh/trunk/src/generic/modwebsh_cgi.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/modwebsh_cgi.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/modwebsh_cgi.c (original)
+++ tcl/websh/trunk/src/generic/modwebsh_cgi.c Tue Sep 4 09:59:43 2007
@@ -166,8 +166,10 @@
}
/* reset errors from getting invalid env vars */
Tcl_ResetResult(interp);
- if (res)
+ if (res) {
Tcl_SetObjResult(interp, res);
+ Tcl_DecrRefCount(res);
+ }
return TCL_OK;
}
Modified: tcl/websh/trunk/src/generic/nca_d.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/nca_d.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/nca_d.c (original)
+++ tcl/websh/trunk/src/generic/nca_d.c Tue Sep 4 09:59:43 2007
@@ -72,6 +72,7 @@
Tcl_Obj *key = NULL;
key = Tcl_NewObj();
+ Tcl_IncrRefCount(key);
setKeyNcaD(key, NULL);
@@ -141,6 +142,7 @@
* ----------------------------------------------------------------------- */
in = Tcl_DuplicateObj(objv[1]);
+ Tcl_IncrRefCount(in);
/* --------------------------------------------------------------------------
* empty string
@@ -160,6 +162,7 @@
}
Tcl_SetObjResult(interp, out);
+ Tcl_DecrRefCount(out);
return TCL_OK;
}
@@ -241,6 +244,7 @@
Tcl_SetObjResult(interp, out);
+ Tcl_DecrRefCount(out);
return TCL_OK;
}
@@ -286,6 +290,7 @@
str = Tcl_GetStringFromObj(in, &strLen);
out = Tcl_NewStringObj("XD", 2);
+ Tcl_IncrRefCount(out);
for (i = 0; i < strLen; i++) {
@@ -347,6 +352,7 @@
str = Tcl_GetStringFromObj(in, &strLen);
out = Tcl_NewObj();
+ Tcl_IncrRefCount(out);
for (i = 2; i < strLen; i++) {
Modified: tcl/websh/trunk/src/generic/paramlist.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/paramlist.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/paramlist.c (original)
+++ tcl/websh/trunk/src/generic/paramlist.c Tue Sep 4 09:59:43 2007
@@ -38,6 +38,7 @@
char **allopts = NULL;
int i = 0, numprivateopts, po;
Tcl_Obj *objCopy = Tcl_DuplicateObj(obj);
+ Tcl_IncrRefCount(objCopy);
/* dynamically determine size of allopts */
while (tablePtr[i]) {i++;}
@@ -217,6 +218,7 @@
res = Tcl_NewObj();
if (res == NULL)
return NULL;
+ Tcl_IncrRefCount(res);
while (nextFromHashIterator(&iterator) != TCL_ERROR) {
Modified: tcl/websh/trunk/src/generic/querystring.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/querystring.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/querystring.c (original)
+++ tcl/websh/trunk/src/generic/querystring.c Tue Sep 4 09:59:43 2007
@@ -45,6 +45,7 @@
if (dodecrypt(interp, query_string, 1) == TCL_OK) {
tclo = Tcl_DuplicateObj(Tcl_GetObjResult(interp));
+ Tcl_IncrRefCount(tclo);
Tcl_ResetResult(interp);
Tcl_DecrRefCount(query_string);
@@ -82,6 +83,7 @@
NULL);
}
+ Tcl_DecrRefCount(query_string);
return TCL_OK;
}
Modified: tcl/websh/trunk/src/generic/request.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/request.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/request.c (original)
+++ tcl/websh/trunk/src/generic/request.c Tue Sep 4 09:59:43 2007
@@ -398,6 +398,7 @@
}
tclo = Tcl_NewStringObj(tmpn, -1);
+ Tcl_IncrRefCount(tclo);
#ifndef WIN32
free(tmpn);
@@ -408,9 +409,10 @@
while ((appendToHashTable(requestData->tmpFnList,
Tcl_GetString(tclo),
(void *) tclo) == TCL_ERROR)
- && (trycnt < 100)) {
+ && (trycnt++ < 100)) {
mytime = Tcl_NewLongObj(((unsigned long) clock()) % 1000);
+ Tcl_IncrRefCount(mytime);
Tcl_AppendObjToObj(tclo, mytime);
Tcl_DecrRefCount(mytime);
}
@@ -427,10 +429,6 @@
Tcl_DecrRefCount(tclo);
return NULL;
}
-
- /* ok, done */
-
- Tcl_IncrRefCount(tclo);
/* fixme-later: should I check for for TMP_MAX filenames per app ?
*/
Modified: tcl/websh/trunk/src/generic/uricode.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/uricode.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/uricode.c (original)
+++ tcl/websh/trunk/src/generic/uricode.c Tue Sep 4 09:59:43 2007
@@ -37,6 +37,7 @@
* --------------------------------------------------------------------- */
if (tclo != NULL) {
Tcl_SetObjResult(interp, tclo);
+ Tcl_DecrRefCount(tclo);
return TCL_OK;
}
@@ -65,6 +66,7 @@
if (res != NULL) {
Tcl_SetObjResult(interp, res);
+ Tcl_DecrRefCount(res);
return TCL_OK;
}
@@ -90,6 +92,7 @@
IfNullLogRetNull(NULL, inString, "uriEncode: got NULL as input.");
tclo = Tcl_NewStringObj("", 0);
+ Tcl_IncrRefCount(tclo);
bytes = Tcl_GetByteArrayFromObj(inString, &bytesLen);
@@ -146,6 +149,7 @@
utf = Tcl_GetStringFromObj(in, &length);
res = Tcl_NewObj();
+ Tcl_IncrRefCount(res);
while (utf[0] != 0) {
Modified: tcl/websh/trunk/src/generic/url.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/url.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/url.c (original)
+++ tcl/websh/trunk/src/generic/url.c Tue Sep 4 09:59:43 2007
@@ -296,6 +296,7 @@
}
res = Tcl_NewObj();
+ Tcl_IncrRefCount(res);
for (i = 0; i < staticPLen; i += 2) {
@@ -368,6 +369,8 @@
if (qStr == NULL)
return NULL;
+ Tcl_IncrRefCount(qStr);
+
if (plist != NULL)
if (Tcl_ListObjAppendList(interp, qStr, plist) == TCL_ERROR)
errCnt++;
@@ -404,13 +407,14 @@
Tcl_DecrRefCount(tmp);
tmp = tmp2;
}
- }
- }
- if (Tcl_ListObjAppendList(interp, qStr, tmp) == TCL_ERROR)
- errCnt++;
+ if (Tcl_ListObjAppendList(interp, qStr, tmp) == TCL_ERROR)
+ errCnt++;
- Tcl_DecrRefCount(tmp);
+ Tcl_DecrRefCount(tmp);
+
+ }
+ }
/* After appending each element in elemListPtr,
* Tcl_ListObjAppendList increments the element's reference count
@@ -550,6 +554,7 @@
if (urlData->querystring != NULL) {
/* take the one which was configured in web::cmdurlcfg */
qStrList = Tcl_DuplicateObj(urlData->querystring);
+ Tcl_IncrRefCount(qStrList);
}
else {
@@ -597,13 +602,18 @@
plist = Tcl_NewObj();
if (plist == NULL)
return TCL_ERROR;
+ Tcl_IncrRefCount(plist);
for (i = iCurArg; i < objc; i += 2) {
if (Tcl_ListObjAppendElement(interp, plist, objv[i]) ==
- TCL_ERROR)
- return TCL_ERROR;
+ TCL_ERROR) {
+ Tcl_DecrRefCount(plist);
+ return TCL_ERROR;
+ }
if (Tcl_ListObjAppendElement(interp, plist, objv[i + 1])
- == TCL_ERROR)
- return TCL_ERROR;
+ == TCL_ERROR) {
+ Tcl_DecrRefCount(plist);
+ return TCL_ERROR;
+ }
}
qStrList = createQueryList(interp, cmd, plist, urlData, flag);
Tcl_DecrRefCount(plist);
@@ -612,22 +622,23 @@
/* ------------------------------------------------------------------
* crypt
* ------------------------------------------------------------------ */
- Tcl_IncrRefCount(qStrList);
if (doencrypt(interp, qStrList, 1) != TCL_OK) {
LOG_MSG(interp, WRITE_LOG, __FILE__, __LINE__,
"web::cmdurl", WEBLOG_ERROR,
"error encrypting \"", Tcl_GetString(qStrList), "\"",
NULL);
- Tcl_DecrRefCount(qStrList);
+ if (qStrList != NULL)
+ Tcl_DecrRefCount(qStrList);
return TCL_ERROR;
- }
- else {
+ } else {
+ if (qStrList != NULL)
Tcl_DecrRefCount(qStrList);
- qStrList = Tcl_DuplicateObj(Tcl_GetObjResult(interp));
- Tcl_ResetResult(interp);
+ qStrList = Tcl_DuplicateObj(Tcl_GetObjResult(interp));
+ Tcl_IncrRefCount(qStrList);
+ Tcl_ResetResult(interp);
}
}
}
@@ -636,6 +647,7 @@
* url (stuff before query_string)
* ======================================================================= */
res = Tcl_NewObj();
+ Tcl_IncrRefCount(res);
if ((urlformat & WEB_URL_WITH_SCHEME) != 0) {
if (urlData->defaultscheme != NULL) {
@@ -707,11 +719,14 @@
if (qStrList != NULL) {
Tcl_AppendToObj(res, WEBURL_QUERY_STRING_SEP, -1);
Tcl_AppendObjToObj(res, qStrList);
- Tcl_DecrRefCount(qStrList);
}
}
+ if (qStrList != NULL) {
+ Tcl_DecrRefCount(qStrList);
+ }
Tcl_SetObjResult(interp, res);
+ Tcl_DecrRefCount(res);
return TCL_OK;
}
@@ -856,6 +871,7 @@
WebAssertObjc(objc > 3, 2, "?value?");
/* format current */
res = Tcl_NewObj();
+ Tcl_IncrRefCount(res);
for (i = SCHEME; i <= QUERYSTRING; i++) {
if (((urlData->urlformat) & urlElementFlags[i]) != 0) {
tmpres =
@@ -875,6 +891,7 @@
urlData->urlformat = urlformat;
}
Tcl_SetObjResult(interp, res);
+ Tcl_DecrRefCount(res);
return TCL_OK;
break;
}
Modified: tcl/websh/trunk/src/generic/varchannel.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/varchannel.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/varchannel.c (original)
+++ tcl/websh/trunk/src/generic/varchannel.c Tue Sep 4 09:59:43 2007
@@ -156,6 +156,7 @@
Tcl_Free(dest);
return -1;
}
+ Tcl_IncrRefCount(tmp);
/* and append it to the global var */
var = Tcl_ObjSetVar2(varChannel->interp,
Modified: tcl/websh/trunk/src/generic/webout.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/webout.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/webout.c (original)
+++ tcl/websh/trunk/src/generic/webout.c Tue Sep 4 09:59:43 2007
@@ -276,6 +276,7 @@
Tcl_GetString(responseObj->name));
tmp = Tcl_DuplicateObj(responseObj->name);
+ Tcl_IncrRefCount(tmp);
tname = Tcl_GetString(tmp);
destroyResponseObj((ClientData) responseObj, interp);
@@ -292,6 +293,7 @@
else
responseObj = getResponseObj(interp, outData, tname);
+ Tcl_DecrRefCount(tmp);
if (responseObj == NULL) {
Tcl_SetResult(interp,
"could not reset response object",
@@ -299,7 +301,6 @@
return TCL_ERROR;
}
- Tcl_DecrRefCount(tmp);
if (outData->defaultResponseObj == NULL)
outData->defaultResponseObj = responseObj;
Modified: tcl/websh/trunk/src/generic/weboutint.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/weboutint.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/weboutint.c (original)
+++ tcl/websh/trunk/src/generic/weboutint.c Tue Sep 4 09:59:43 2007
@@ -460,15 +460,15 @@
}
if (begin) {
tclo = Tcl_NewStringObj("web::put \"", -1);
+ Tcl_IncrRefCount(tclo);
Tcl_AppendObjToObj(tclo, outbuf);
+ Tcl_DecrRefCount(outbuf);
} else {
tclo = outbuf;
}
Tcl_AppendToObj(tclo, "\"", -1);
- Tcl_IncrRefCount(tclo);
res = Tcl_EvalObjEx(interp, tclo, TCL_EVAL_DIRECT);
Tcl_DecrRefCount(tclo);
- Tcl_DecrRefCount(outbuf);
return res;
}
@@ -496,6 +496,7 @@
return TCL_ERROR;
sendString = Tcl_NewObj();
+ Tcl_IncrRefCount(sendString);
if (responseObj->sendHeader) {
responseObj->headerHandler(interp, responseObj, sendString);
Modified: tcl/websh/trunk/src/generic/webutl.c
URL: http://svn.apache.org/viewvc/tcl/websh/trunk/src/generic/webutl.c?rev=572736&r1=572735&r2=572736&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/webutl.c (original)
+++ tcl/websh/trunk/src/generic/webutl.c Tue Sep 4 09:59:43 2007
@@ -192,6 +192,7 @@
if (*tclo == NULL) {
*tclo = Tcl_NewObj();
+ Tcl_IncrRefCount(*tclo);
}
Tcl_SetObjResult(interp, Tcl_DuplicateObj(*tclo));
@@ -248,8 +249,10 @@
return NULL;
arrayName = Tcl_NewStringObj("::env", 5);
+ Tcl_IncrRefCount(arrayName);
keyObj = Tcl_NewStringObj(key, -1);
+ Tcl_IncrRefCount(keyObj);
if (val == NULL) {
@@ -269,6 +272,9 @@
Tcl_DecrRefCount(arrayName);
Tcl_DecrRefCount(keyObj);
+ if (res) {
+ Tcl_IncrRefCount(res);
+ }
return res;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: websh-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: websh-cvs-help@tcl.apache.org