summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2007-09-19 00:33:43 +0000
committerStanislav Malyshev <stas@php.net>2007-09-19 00:33:43 +0000
commit1ef91c8494c9812f3dfa8f6cadf28710d1fae4cc (patch)
treec6cec1405148e772df3bdeab230a564596f9a9fc
parent2fe9599880d09f6e9edc5e74aa372c1d744bc386 (diff)
downloadphp-git-1ef91c8494c9812f3dfa8f6cadf28710d1fae4cc.tar.gz
limit iconv parameters here too
-rw-r--r--ext/xmlrpc/libxmlrpc/encodings.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/ext/xmlrpc/libxmlrpc/encodings.c b/ext/xmlrpc/libxmlrpc/encodings.c
index 1637a0961c..f4cc212d7c 100644
--- a/ext/xmlrpc/libxmlrpc/encodings.c
+++ b/ext/xmlrpc/libxmlrpc/encodings.c
@@ -53,6 +53,10 @@ static const char rcsid[] = "#(@) $Id$";
#include "encodings.h"
+#ifndef ICONV_CSNMAXLEN
+#define ICONV_CSNMAXLEN 64
+#endif
+
static char* convert(const char* src, int src_len, int *new_len, const char* from_enc, const char* to_enc) {
char* outbuf = 0;
@@ -60,9 +64,13 @@ static char* convert(const char* src, int src_len, int *new_len, const char* fro
size_t outlenleft = src_len;
size_t inlenleft = src_len;
int outlen = src_len;
- iconv_t ic = iconv_open(to_enc, from_enc);
+ iconv_t ic;
char* out_ptr = 0;
+ if(strlen(to_enc) >= ICONV_CSNMAXLEN || strlen(from_enc) >= ICONV_CSNMAXLEN) {
+ return NULL;
+ }
+ ic = iconv_open(to_enc, from_enc);
if(ic != (iconv_t)-1) {
size_t st;
outbuf = (char*)malloc(outlen + 1);