|
Joost Yervante Damad
joost.damad at siemens.atea.be
Thu Feb 22 08:09:37 EST 2001
'Rich Salz' wrote about 'Re: [mod_python] mod_python/publisher/solaris truncation problems' - Wed, Feb 21, 2001 at 03:33:57PM CET
> a diff would be more useful. ...
True... but the changes I made are not really meant as a
solution. They merely show how we solved it to have a workable
mod_python. I can get you a diff if you want. (see attachment)
It's not a very usefull diff imho tho :)
--
Joost Damad - Siemens IC D NC A - +3214252297
--
Five is a sufficiently close approximation to infinity.
-- Robert Firth
"One, two, five."
-- Monty Python and the Holy Grail
-------------- next part --------------
--- mod_python-2.7.2/src/_apachemodule.c Mon Dec 18 20:50:03 2000
+++ ../delta/changed_src/_apachemodule.c Wed Feb 21 10:15:03 2001
@@ -48,10 +48,14 @@
*
*/
#include "mod_python.h"
+#ifdef ATEA_DEBUG
+#undef ATEA_DEBUG
+#endif
+
/**
** log_error
**
* A wrpapper to ap_log_error
*
@@ -253,11 +257,11 @@
static PyObject *parse_qsl(PyObject *self, PyObject *args)
{
PyObject *pairs;
int i, len;
- char *qs;
+ char *qs, *cpair;
int keep_blank_values = 0;
int strict_parsing = 0; /* XXX not implemented */
if (! PyArg_ParseTuple(args, "s|ii", &qs, &keep_blank_values,
&strict_parsing))
@@ -269,83 +273,131 @@
return NULL;
i = 0;
len = strlen(qs);
+ cpair=calloc(1,len);
+
while (i < len) {
- PyObject *pair, *key, *val;
- char *cpair, *ckey, *cval;
+ /*PyObject *pair, *key, *val;*/
+ PyObject *key, *val;
+ /*char *cpair, *ckey, *cval;*/
+ char *ckey, *cval;
int plen, j, p, k, v;
- pair = PyString_FromStringAndSize(NULL, len);
+ /* pair = PyString_FromStringAndSize(NULL, len);
if (pair == NULL)
- return NULL;
+ return NULL;*/
/* split by '&' or ';' */
- cpair = PyString_AS_STRING(pair);
+ /*cpair = PyString_AS_STRING(pair);
+ cpair=calloc(1,len);*/
+#ifdef ATEA_DEBUG
+ fprintf(stderr, "all pairs: %s\n", cpair);
+#endif
j = 0;
while ((qs[i] != '&') && (qs[i] != ';') && (i < len)) {
/* replace '+' with ' ' */
cpair[j] = (qs[i] == '+') ? ' ' : qs[i];
i++;
j++;
}
cpair[j] = '\0';
- _PyString_Resize(&pair, j);
+ /*_PyString_Resize(&pair, j);*/
/* split the "abc=def" pair */
-
+#ifdef ATEA_DEBUG
+ fprintf(stderr,"[foo] cpair == %s\n", cpair);
+#endif
plen = strlen(cpair);
- key = PyString_FromStringAndSize(NULL, plen);
- if (key == NULL)
- return NULL;
- val = PyString_FromStringAndSize(NULL, plen);
- if (val == NULL)
- return NULL;
-
- ckey = PyString_AS_STRING(key);
- cval = PyString_AS_STRING(val);
+#ifdef ATEA_DEBUG
+ fprintf(stderr,"plen == %d\n", plen);
+#endif
+ /*key = PyString_FromStringAndSize(NULL, plen);
+ if (key == NULL)
+ return NULL;
+ val = PyString_FromStringAndSize(NULL, plen);
+ if (val == NULL)
+ return NULL;*/
+ /*ckey = PyString_AS_STRING(key);
+ cval = PyString_AS_STRING(val);*/
+
+ ckey = calloc(1,plen);
+ cval = calloc(1,plen);
+ /*memset(ckey,0,plen);
+ memset(cval,0,plen);*/
+#ifdef ATEA_DEBUG
+ fprintf(stderr,"ckey=%s, cval=%s (should be empty)\n", ckey, cval);
+#endif
+
p = 0;
k = 0;
v = 0;
while (p < plen) {
- if (cpair[p] != '=') {
- ckey[k] = cpair[p];
- k++;
- p++;
+ if (cpair[p] != '=')
+ {
+#ifdef ATEA_DEBUG
+ fprintf(stderr,"%d cpair=%s ckey=%s, cval=%s (parsing before '=')\n", p, cpair, ckey, cval);
+#endif
+ ckey[k] = cpair[p];
+ k++;
+ p++;
}
else {
- p++; /* skip '=' */
- while (p < plen) {
- cval[v] = cpair[p];
- v++;
- p++;
- }
+ p++; /* skip '=' */
+#ifdef ATEA_DEBUG
+ fprintf(stderr, ">>> entering else branch...\n");
+#endif
+ while (p < plen)
+ {
+#ifdef ATEA_DEBUG
+ fprintf(stderr,"%d cpair=%s ckey=%s, cval=%s (parsing after '=')\n", p, cpair, ckey, cval);
+#endif
+ cval[v] = cpair[p];
+ v++;
+ p++;
+ }
}
}
ckey[k] = '\0';
cval[v] = '\0';
+#ifdef ATEA_DEBUG
+ fprintf(stderr,"ckey=%s, cval=%s\n (final)", ckey, cval);
+#endif
if (keep_blank_values || (v > 0)) {
ap_unescape_url(ckey);
ap_unescape_url(cval);
- _PyString_Resize(&key, strlen(ckey));
- _PyString_Resize(&val, strlen(cval));
+ /*_PyString_Resize(&key, strlen(ckey));
+ _PyString_Resize(&val, strlen(cval));*/
+ key = PyString_FromStringAndSize(ckey, strlen(ckey));
+ if (key == NULL) {
+ free(ckey); free(cval); free(cpair);
+ return NULL;
+ }
+ val = PyString_FromStringAndSize(cval, strlen(cval));
+ if (val == NULL) {
+ free(ckey); free(cval); free(cpair);
+ return NULL;
+ }
+
PyList_Append(pairs, Py_BuildValue("(O,O)", key, val));
}
- Py_DECREF(pair);
+ /*Py_DECREF(pair);*/
Py_DECREF(key);
Py_DECREF(val);
i++;
+ free(ckey);
+ free(cval);
}
-
+ free(cpair);
return pairs;
}
/* methods of _apache */
|