[Libguestfs] [PATCH 2/2] lib: utf16: Fix const-correctness issues in _hivex_recode function.

Richard W.M. Jones rjones at redhat.com
Tue Dec 31 14:27:11 UTC 2013


This patch assumes that iconv doesn't actually modify the
input buffer, even though it is declared as char *.
---
 lib/hivex-internal.h | 6 +++---
 lib/utf16.c          | 9 +++++----
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/lib/hivex-internal.h b/lib/hivex-internal.h
index 7a548c0..6bc8638 100644
--- a/lib/hivex-internal.h
+++ b/lib/hivex-internal.h
@@ -268,9 +268,9 @@ extern size_t * _hivex_return_offset_list (offset_list *list);
 extern void _hivex_print_offset_list (offset_list *list, FILE *fp);
 
 /* utf16.c */
-extern char* _hivex_recode (char *input_encoding,
-                            const char *input, size_t input_len,
-                            char *output_encoding, size_t *output_len);
+extern char * _hivex_recode (const char *input_encoding,
+                             const char *input, size_t input_len,
+                             const char *output_encoding, size_t *output_len);
 #define _hivex_windows_utf16_to_utf8(_input, _len) \
   _hivex_recode ("UTF-16LE", _input, _len, "UTF-8", NULL)
 #define _hivex_windows_latin1_to_utf8(_input, _len) \
diff --git a/lib/utf16.c b/lib/utf16.c
index 437613b..3641580 100644
--- a/lib/utf16.c
+++ b/lib/utf16.c
@@ -30,8 +30,8 @@
 #include "hivex-internal.h"
 
 char *
-_hivex_recode (char *input_encoding, const char *input, size_t input_len,
-               char *output_encoding, size_t *output_len)
+_hivex_recode (const char *input_encoding, const char *input, size_t input_len,
+               const char *output_encoding, size_t *output_len)
 {
   iconv_t ic = iconv_open (output_encoding, input_encoding);
   if (ic == (iconv_t) -1)
@@ -51,10 +51,11 @@ _hivex_recode (char *input_encoding, const char *input, size_t input_len,
     errno = err;
     return NULL;
   }
-  char *inp = input;
+  const char *inp = input;
   char *outp = out;
 
-  size_t r = iconv (ic, &inp, &inlen, &outp, &outlen);
+  /* Surely iconv doesn't really modify the input buffer? XXX */
+  size_t r = iconv (ic, (char **) &inp, &inlen, &outp, &outlen);
   if (r == (size_t) -1) {
     if (errno == E2BIG) {
       int err = errno;
-- 
1.8.4.2




More information about the Libguestfs mailing list