iconv sync 1/x: FreeBSD SVN 262441
authorJohn Marino <draco@marino.st>
Fri, 3 Jul 2015 21:18:52 +0000 (23:18 +0200)
committerJohn Marino <draco@marino.st>
Sat, 4 Jul 2015 08:19:05 +0000 (10:19 +0200)
Consistently pass around context information using a simple pointer.
This fixes some dereferencing bugs in Chinese character set conversions.

lib/i18n_module/BIG5/citrus_big5.c
lib/i18n_module/HZ/citrus_hz.c
lib/libc/citrus/citrus_prop.c
lib/libc/citrus/citrus_prop.h

index f112306..d0b3c70 100644 (file)
@@ -1,5 +1,5 @@
-/* $FreeBSD: head/lib/libiconv_modules/BIG5/citrus_big5.c 252583 2013-07-03 18:27:45Z peter $ */
-/*     $NetBSD: citrus_big5.c,v 1.12 2008/06/14 16:01:07 tnozaki Exp $ */
+/* $FreeBSD: head/lib/libiconv_modules/BIG5/citrus_big5.c 281550 2015-04-15 09:09:20Z tijl $ */
+/*     $NetBSD: citrus_big5.c,v 1.13 2011/05/23 14:53:46 joerg Exp $   */
 
 /*-
  * Copyright (c)2002, 2006 Citrus Project,
@@ -170,7 +170,7 @@ _citrus_BIG5_check_excludes(_BIG5EncodingInfo *ei, wint_t c)
 }
 
 static int
-_citrus_BIG5_fill_rowcol(void ** __restrict ctx, const char * __restrict s,
+_citrus_BIG5_fill_rowcol(void * __restrict ctx, const char * __restrict s,
     uint64_t start, uint64_t end)
 {
        _BIG5EncodingInfo *ei;
@@ -189,7 +189,7 @@ _citrus_BIG5_fill_rowcol(void ** __restrict ctx, const char * __restrict s,
 
 static int
 /*ARGSUSED*/
-_citrus_BIG5_fill_excludes(void ** __restrict ctx,
+_citrus_BIG5_fill_excludes(void * __restrict ctx,
     const char * __restrict s __unused, uint64_t start, uint64_t end)
 {
        _BIG5EncodingInfo *ei;
@@ -235,7 +235,6 @@ static int
 _citrus_BIG5_encoding_module_init(_BIG5EncodingInfo * __restrict ei,
     const void * __restrict var, size_t lenvar)
 {
-       void *ctx = (void *)ei;
        const char *s;
        int err;
 
@@ -257,9 +256,9 @@ _citrus_BIG5_encoding_module_init(_BIG5EncodingInfo * __restrict ei,
        }
 
        /* fallback Big5-1984, for backward compatibility. */
-       _citrus_BIG5_fill_rowcol((void **)&ctx, "row", 0xA1, 0xFE);
-       _citrus_BIG5_fill_rowcol((void **)&ctx, "col", 0x40, 0x7E);
-       _citrus_BIG5_fill_rowcol((void **)&ctx, "col", 0xA1, 0xFE);
+       _citrus_BIG5_fill_rowcol(ei, "row", 0xA1, 0xFE);
+       _citrus_BIG5_fill_rowcol(ei, "col", 0x40, 0x7E);
+       _citrus_BIG5_fill_rowcol(ei, "col", 0xA1, 0xFE);
 
        return (0);
 }
index 9c3098a..4b5ee8e 100644 (file)
@@ -1,4 +1,4 @@
-/* $FreeBSD: head/lib/libiconv_modules/HZ/citrus_hz.c 252583 2013-07-03 18:27:45Z peter $ */
+/* $FreeBSD: head/lib/libiconv_modules/HZ/citrus_hz.c 281550 2015-04-15 09:09:20Z tijl $ */
 /* $NetBSD: citrus_hz.c,v 1.2 2008/06/14 16:01:07 tnozaki Exp $ */
 
 /*-
@@ -503,12 +503,12 @@ _citrus_HZ_encoding_module_uninit(_HZEncodingInfo *ei)
 }
 
 static int
-_citrus_HZ_parse_char(void **context, const char *name __unused, const char *s)
+_citrus_HZ_parse_char(void *context, const char *name __unused, const char *s)
 {
        escape_t *escape;
        void **p;
 
-       p = (void **)*context;
+       p = (void **)context;
        escape = (escape_t *)p[0];
        if (escape->ch != '\0')
                return (EINVAL);
@@ -520,14 +520,14 @@ _citrus_HZ_parse_char(void **context, const char *name __unused, const char *s)
 }
 
 static int
-_citrus_HZ_parse_graphic(void **context, const char *name, const char *s)
+_citrus_HZ_parse_graphic(void *context, const char *name, const char *s)
 {
        _HZEncodingInfo *ei;
        escape_t *escape;
        graphic_t *graphic;
        void **p;
 
-       p = (void **)*context;
+       p = (void **)context;
        escape = (escape_t *)p[0];
        ei = (_HZEncodingInfo *)p[1];
        graphic = malloc(sizeof(*graphic));
@@ -589,13 +589,13 @@ _CITRUS_PROP_HINT_END
 };
 
 static int
-_citrus_HZ_parse_escape(void **context, const char *name, const char *s)
+_citrus_HZ_parse_escape(void *context, const char *name, const char *s)
 {
        _HZEncodingInfo *ei;
        escape_t *escape;
        void *p[2];
 
-       ei = (_HZEncodingInfo *)*context;
+       ei = (_HZEncodingInfo *)context;
        escape = malloc(sizeof(*escape));
        if (escape == NULL)
                return (EINVAL);
index 11f3a44..ae89dad 100644 (file)
@@ -1,5 +1,5 @@
-/* $FreeBSD: head/lib/libc/iconv/citrus_prop.c 219019 2011-02-25 00:04:39Z gabor $ */
-/* $NetBSD: citrus_prop.c,v 1.3 2006/11/22 23:47:21 tnozaki Exp $ */
+/* $FreeBSD: head/lib/libc/iconv/citrus_prop.c 281798 2015-04-20 22:09:50Z pfg $ */
+/* $NetBSD: citrus_prop.c,v 1.4 2011/03/30 08:22:01 jruoho Exp $ */
 
 /*-
  * Copyright (c)2006 Citrus Project,
@@ -336,7 +336,7 @@ name_found:
 
 static int
 _citrus_prop_parse_element(struct _memstream * __restrict ms,
-    const _citrus_prop_hint_t * __restrict hints, void ** __restrict context)
+    const _citrus_prop_hint_t * __restrict hints, void * __restrict context)
 {
        int ch, errnum;
 #define _CITRUS_PROP_HINT_NAME_LEN_MAX 255
@@ -432,8 +432,7 @@ _citrus_prop_parse_variable(const _citrus_prop_hint_t * __restrict hints,
                if (ch == EOF || ch == '\0')
                        break;
                _memstream_ungetc(&ms, ch);
-               errnum = _citrus_prop_parse_element(
-                   &ms, hints, (void ** __restrict)context);
+               errnum = _citrus_prop_parse_element(&ms, hints, context);
                if (errnum != 0)
                        return (errnum);
        }
index b7d41f9..b343121 100644 (file)
@@ -1,5 +1,5 @@
-/* $FreeBSD: head/lib/libc/iconv/citrus_prop.h 219019 2011-02-25 00:04:39Z gabor $ */
-/* $NetBSD: citrus_prop.h,v 1.3 2006/11/23 13:59:03 tnozaki Exp $ */
+/* $FreeBSD: head/lib/libc/iconv/citrus_prop.h 263986 2014-04-01 10:36:11Z tijl $ */
+/* $NetBSD: citrus_prop.h,v 1.5 2011/05/23 14:52:32 joerg Exp $ */
 
 /*-
  * Copyright (c)2006 Citrus Project,
@@ -42,7 +42,7 @@ typedef struct _citrus_prop_hint_t _citrus_prop_hint_t;
 
 #define _CITRUS_PROP_CB0_T(_func_, _type_) \
 typedef int (*_citrus_prop_##_func_##_cb_func_t) \
-    (void ** __restrict, const char *, _type_); \
+    (void * __restrict, const char *, _type_); \
 typedef struct { \
        _citrus_prop_##_func_##_cb_func_t func; \
 } _citrus_prop_##_func_##_cb_t;
@@ -52,7 +52,7 @@ _CITRUS_PROP_CB0_T(str, const char *)
 
 #define _CITRUS_PROP_CB1_T(_func_, _type_) \
 typedef int (*_citrus_prop_##_func_##_cb_func_t) \
-    (void ** __restrict, const char *, _type_, _type_); \
+    (void * __restrict, const char *, _type_, _type_); \
 typedef struct { \
        _citrus_prop_##_func_##_cb_func_t func; \
 } _citrus_prop_##_func_##_cb_t;