]> git.sven.stormbind.net Git - sven/tclcurl.git/commitdiff
Add d/pattches/bts719441.patch - thanks to Christian Werner! (Closes: #719441.patch)
authorSven Hoexter <sven@stormbind.net>
Sat, 17 Oct 2015 21:11:08 +0000 (23:11 +0200)
committerSven Hoexter <sven@stormbind.net>
Sat, 17 Oct 2015 21:11:08 +0000 (23:11 +0200)
debian/changelog
debian/patches/bts719441.patch [new file with mode: 0644]
debian/patches/series

index 66a598450c231e15533d4a89438ff638f4f7d2ca..104f9eddc4165f3fa08407497a03e7bbe9fe758a 100644 (file)
@@ -6,6 +6,8 @@ tclcurl (7.22.0+hg20151017-1) UNRELEASED; urgency=low
   * Update d/copyright and add the link to Steve Havelkas bitbuck repository.
   * Add d/patches/bts801734.patch - thanks to Christian Werner!
     (Closes: #801734)
+  * Add d/pattches/bts719441.patch - thanks to Christian Werner!
+    (Closes: #719441.patch)
 
  -- Sven Hoexter <hoexter@debian.org>  Sat, 17 Oct 2015 22:16:02 +0200
 
diff --git a/debian/patches/bts719441.patch b/debian/patches/bts719441.patch
new file mode 100644 (file)
index 0000000..bb13b42
--- /dev/null
@@ -0,0 +1,108 @@
+Description: close the file handle in time, increase space allocated for handleName and shandleName
+Origin: https://www.androwish.org/index.html/vpatch?from=e4864fde820aac71&to=ce9a5b5886ac7381
+Author: Christian Werner <chw@ch-werner.de>
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=719441
+Forwarded: yes, email
+
+Index: tclcurl/generic/tclcurl.c
+===================================================================
+--- tclcurl.orig/generic/tclcurl.c
++++ tclcurl/generic/tclcurl.c
+@@ -87,7 +87,7 @@ curlCreateObjCmd (Tcl_Interp *interp,str
+     Tcl_Command         cmdToken;
+     /* We try with curl1, if it already exists with curl2...*/
+-    handleName=(char *)Tcl_Alloc(10);
++    handleName=(char *)Tcl_Alloc(32);
+     for (i=1;;i++) {
+         sprintf(handleName,"curl%d",i);
+         if (!Tcl_GetCommandInfo(interp,handleName,&info)) {
+@@ -483,6 +483,12 @@ curlSetOpts(Tcl_Interp *interp, struct c
+         case 2:
+             Tcl_Free(curlData->inFile);
+             curlData->inFile=curlstrdup(Tcl_GetString(objv));
++            if (curlData->inFlag) {
++                if (curlData->inHandle!=NULL) {
++                    fclose(curlData->inHandle);
++                    curlData->inHandle=NULL;
++                }
++            }
+             if ((strcmp(curlData->inFile,""))&&(strcmp(curlData->inFile,"stdin"))) {
+                 curlData->inFlag=1;
+             } else {
+@@ -914,6 +920,13 @@ curlSetOpts(Tcl_Interp *interp, struct c
+         case 44:
+             Tcl_Free(curlData->headerFile);
+             curlData->headerFile=curlstrdup(Tcl_GetString(objv));
++            if (curlData->headerFlag) {
++                if (curlData->headerHandle!=NULL) {
++                    fclose(curlData->headerHandle);
++                    curlData->headerHandle=NULL;
++                }
++                curl_easy_setopt(curlHandle,CURLOPT_HEADERDATA,NULL);
++            }
+             if ((strcmp(curlData->headerFile,""))&&(strcmp(curlData->headerFile,"stdout"))
+                     &&(strcmp(curlData->headerFile,"stderr"))) {
+                 curlData->headerFlag=1;
+@@ -1035,6 +1048,14 @@ curlSetOpts(Tcl_Interp *interp, struct c
+             }
+             break;
+         case 61:
++            if (curlData->headerFlag) {
++                if (curlData->headerHandle!=NULL) {
++                    fclose(curlData->headerHandle);
++                    curlData->headerHandle=NULL;
++                }
++                curl_easy_setopt(curlHandle,CURLOPT_HEADERDATA,NULL);
++                curlData->headerFlag=0;
++            }
+             if (curl_easy_setopt(curlHandle,CURLOPT_HEADERFUNCTION,
+                     curlHeaderReader)) {
+                 return TCL_ERROR;
+@@ -1114,6 +1135,13 @@ curlSetOpts(Tcl_Interp *interp, struct c
+             break;
+         case 66:
+             curlData->readProc=curlstrdup(Tcl_GetString(objv));
++            if (curlData->inFlag) {
++                if (curlData->inHandle!=NULL) {
++                    fclose(curlData->inHandle);
++                    curlData->inHandle=NULL;
++                }
++                curl_easy_setopt(curlHandle,CURLOPT_READDATA,NULL);
++            }
+             curlData->inFlag=0;
+             if (strcmp(curlData->readProc,"")) {
+                 if (curl_easy_setopt(curlHandle,CURLOPT_READFUNCTION,
+@@ -2439,12 +2467,14 @@ curlHeaderReader(void *ptr,size_t size,s
+         headerContent[charLength]=0;
+         /* There may be multiple 'Set-Cookie' headers, so we use a list */
+         if (Tcl_StringCaseMatch(headerName,"Set-Cookie",1)) {
+-            Tcl_SetVar2(curlData->interp,curlData->headerVar,headerName, \
++            Tcl_SetVar2(curlData->interp,curlData->headerVar,headerName,
+                     headerContent,TCL_LIST_ELEMENT|TCL_APPEND_VALUE);
+         } else {
+             Tcl_SetVar2(curlData->interp,curlData->headerVar,headerName,
+                     headerContent,0);
+         }
++        Tcl_Free(headerContent);
++        Tcl_Free(headerName);
+     }
+     regExp=Tcl_RegExpCompile(curlData->interp,"(^(HTTP|http)[^\r]+)(\r*)(\n)");
+     match=Tcl_RegExpExec(curlData->interp,regExp,header,header);
+@@ -2457,6 +2487,7 @@ curlHeaderReader(void *ptr,size_t size,s
+         Tcl_SetVar2(curlData->interp,curlData->headerVar,"http",
+                 httpStatus,0);
++      Tcl_Free(httpStatus);
+     }
+     return size*nmemb;
+ }
+@@ -4159,7 +4190,7 @@ curlCreateShareObjCmd (Tcl_Interp *inter
+     Tcl_Command         cmdToken;
+     /* We try with scurl1, if it already exists with scurl2...*/
+-    shandleName=(char *)Tcl_Alloc(10);
++    shandleName=(char *)Tcl_Alloc(32);
+     for (i=1;;i++) {
+         sprintf(shandleName,"scurl%d",i);
+         if (!Tcl_GetCommandInfo(interp,shandleName,&info)) {
index 0c767c3f7b4eaf7123f01657c580ef4bddf8894e..5821c22c05d6645031c82b4e64b262d051ca8ec8 100644 (file)
@@ -1 +1,2 @@
 bts801734.patch
+bts719441.patch