diff options
-rw-r--r-- | src/main.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c index ab5bbc595..4867d1a0e 100644 --- a/src/main.c +++ b/src/main.c @@ -3225,13 +3225,21 @@ CURLcode _my_setopt(CURL *curl, const char *name, CURLoption tag, ...) } else if(tag < CURLOPTTYPE_OFF_T) { - /* we treat both object and function pointers like this */ void *pval = va_arg(arg, void *); unsigned char *ptr = (unsigned char *)pval; + /* function pointers are never printable */ + if (tag >= CURLOPTTYPE_FUNCTIONPOINT) { + if (pval) { + snprintf(value, sizeof(value), "%p", pval); + remark = TRUE; + } + else + strcpy(value, "NULL"); + } /* attempt to figure out if it is a string (since the tag numerical doesn't offer this info) and then output it as a string if so */ - if(pval && isgraph(ptr[0]) && isgraph(ptr[1])) + else if(pval && isgraph(ptr[0]) && isgraph(ptr[1])) snprintf(value, sizeof(value), "\"%s\"", (char *)ptr); else if(pval) { snprintf(value, sizeof(value), "%p", pval); |