diff options
author | manoj <manoj@13f79535-47bb-0310-9956-ffa450edef68> | 1999-11-05 21:16:18 +0000 |
---|---|---|
committer | manoj <manoj@13f79535-47bb-0310-9956-ffa450edef68> | 1999-11-05 21:16:18 +0000 |
commit | 134bb8768fda1747c83f4788b930ff12b1a14063 (patch) | |
tree | 86ad7d81f13ac268b4ec59a5fae324d6aff2153b /file_io/win32 | |
parent | b8298068a4597722e5b42c70c887dfb43b8c8682 (diff) | |
download | libapr-134bb8768fda1747c83f4788b930ff12b1a14063.tar.gz |
Rewrite ap_fprintf to be uniform on all platforms. This fixes a memory
leak and potential buffer overflow.
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@59456 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'file_io/win32')
-rw-r--r-- | file_io/win32/readwrite.c | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/file_io/win32/readwrite.c b/file_io/win32/readwrite.c index 3e3944601..1fad6ec53 100644 --- a/file_io/win32/readwrite.c +++ b/file_io/win32/readwrite.c @@ -256,7 +256,6 @@ API_EXPORT(int) ap_fprintf(struct file_t *fptr, const char *format, ...) { int cc; va_list ap; - ap_vformatter_buff_t vbuff; char *buf; int len; @@ -264,20 +263,12 @@ API_EXPORT(int) ap_fprintf(struct file_t *fptr, const char *format, ...) if (buf == NULL) { return 0; } - /* save one byte for nul terminator */ - vbuff.curpos = buf; - vbuff.endpos = buf + len - 1; va_start(ap, format); -#if 0 - cc = ap_vformatter(printf_flush, &vbuff, format, ap); + len = ap_vsnprintf(buf, HUGE_STRING_LEN, format, ap); + cc = ap_puts(buf, fptr); va_end(ap); - *vbuff.curpos = '\0'; -#endif - vsprintf(buf, format, ap); - len = strlen(buf); - cc = ap_write(fptr, buf, &len); - va_end(ap); - return (cc == -1) ? len : cc; + free(buf); + return (cc == APR_SUCCESS) ? len : -1; } |