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