summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--dlib/dlib.c34
-rw-r--r--dlib/dlib.h1
-rw-r--r--src/IO/IO.c3
-rw-r--r--src/IO/http.c3
-rw-r--r--src/capi.c3
6 files changed, 39 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index bc9871db..4b19d8c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -87,7 +87,7 @@ dillo-fltk2
- Fixed a bug in Html_parse_entity.
- Fixed a bug in a_Url_cmp.
- Fixed a bug in Cookies_parse_one. Set it to a single return point too!
- - Added dStr_memmem() to dlib.
+ - Added dStr_memmem() and dStr_printable() to dlib.
- Fixed a decoding bug in the datauri dpi.
Patches: place
+- Fixed a problem with locally-installed dpis.
diff --git a/dlib/dlib.c b/dlib/dlib.c
index 862e642f..f01314eb 100644
--- a/dlib/dlib.c
+++ b/dlib/dlib.c
@@ -435,6 +435,40 @@ char *dStr_memmem(Dstr *haystack, Dstr *needle)
}
/*
+ * Return a printable representation of the provided Dstr, limited to a length
+ * of roughly maxlen.
+ *
+ * This is NOT threadsafe.
+ */
+const char *dStr_printable(Dstr *in, int maxlen)
+{
+ int i;
+ static const char *const HEX = "0123456789ABCDEF";
+ static Dstr *out = NULL;
+
+ if (in == NULL)
+ return NULL;
+
+ if (out)
+ dStr_truncate(out, 0);
+ else
+ out = dStr_sized_new(in->len);
+
+ for (i = 0; (i < in->len) && (out->len < maxlen); ++i) {
+ if (isprint(in->str[i]) || (in->str[i] == '\n')) {
+ dStr_append_c(out, in->str[i]);
+ } else {
+ dStr_append_l(out, "\\x", 2);
+ dStr_append_c(out, HEX[(in->str[i] >> 4) & 15]);
+ dStr_append_c(out, HEX[in->str[i] & 15]);
+ }
+ }
+ if (out->len >= maxlen)
+ dStr_append(out, "...");
+ return out->str;
+}
+
+/*
*- dList ---------------------------------------------------------------------
*/
diff --git a/dlib/dlib.h b/dlib/dlib.h
index 7bcac739..cd3b9fc5 100644
--- a/dlib/dlib.h
+++ b/dlib/dlib.h
@@ -108,6 +108,7 @@ void dStr_sprintf (Dstr *ds, const char *format, ...);
void dStr_sprintfa (Dstr *ds, const char *format, ...);
int dStr_cmp(Dstr *ds1, Dstr *ds2);
char *dStr_memmem(Dstr *haystack, Dstr *needle);
+const char *dStr_printable(Dstr *in, int maxlen);
/*
*-- dList --------------------------------------------------------------------
diff --git a/src/IO/IO.c b/src/IO/IO.c
index 2e09c1b0..4b24c774 100644
--- a/src/IO/IO.c
+++ b/src/IO/IO.c
@@ -354,9 +354,8 @@ void a_IO_ccc(int Op, int Branch, int Dir, ChainLink *Info,
case OpAbort:
io = Info->LocalKey;
if (io->Buf->len > 0) {
- /* MSG can be truncated by embedded NULLs */
MSG_WARN("IO_write, closing with pending data not sent\n");
- MSG_WARN(" \"%s\"\n", io->Buf->str);
+ MSG_WARN(" \"%s\"\n", dStr_printable(io->Buf, 2048));
}
/* close FD, remove from ValidIOs and remove its watch */
IO_close_fd(io, IO_StopRdWr);
diff --git a/src/IO/http.c b/src/IO/http.c
index 8ccb015c..a6acc031 100644
--- a/src/IO/http.c
+++ b/src/IO/http.c
@@ -278,8 +278,7 @@ Dstr *a_Http_make_query_str(const DilloUrl *url, bool_t use_proxy)
dStr_free(s_port, TRUE);
dStr_free(full_path, TRUE);
dStr_free(proxy_auth, TRUE);
- /* debug msg will fail on embedded NULLs */
- DEBUG_MSG(4, "Query:\n%s", query->str);
+ DEBUG_MSG(4, "Query:\n%s\n", dStr_printable(query, 8192));
return query;
}
diff --git a/src/capi.c b/src/capi.c
index 77e80cf4..cbe3febc 100644
--- a/src/capi.c
+++ b/src/capi.c
@@ -228,8 +228,7 @@ static int Capi_dpi_verify_request(DilloWeb *web)
MSG("Capi_dpi_verify_request: Permission Denied!\n");
MSG(" URL_STR : %s\n", URL_STR(web->url));
if (URL_FLAGS(web->url) & URL_Post) {
- /* MSG will fail on embedded NULLs */
- MSG(" URL_DATA: %s\n", URL_DATA(web->url)->str);
+ MSG(" URL_DATA: %s\n", dStr_printable(URL_DATA(web->url), 1024));
}
}
return allow;