]> git.wh0rd.org Git - nano.git/commitdiff
fix potential memory corruption problem in make_mbstring(), and also fix
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 15 Mar 2005 06:34:09 +0000 (06:34 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 15 Mar 2005 06:34:09 +0000 (06:34 +0000)
compilation with -pedantic

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2372 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

src/chars.c
src/proto.h
src/winio.c

index 79c66b89b1d29f8e4f0a9d9ae1ea3a3806728d08..6da82e926219b706e129256ed5e7a62e0f1223c1 100644 (file)
@@ -213,7 +213,7 @@ char *control_mbrep(const char *c, char *crep, int *crep_len)
     } else {
 #endif
        *crep_len = 1;
-       crep[0] = control_rep((unsigned char)*c);
+       *crep = control_rep((unsigned char)*c);
 
        return crep;
 #ifdef NANO_WIDE
@@ -276,10 +276,10 @@ int mb_cur_max(void)
  * multibyte character and its length. */
 char *make_mbchar(int chr, int *chr_mb_len)
 {
-    assert(chr_mb != NULL && chr_mb_len != NULL);
-
     char *chr_mb;
 
+    assert(chr_mb != NULL && chr_mb_len != NULL);
+
 #ifdef NANO_WIDE
     if (!ISSET(NO_UTF8)) {
        chr_mb = charalloc(MB_CUR_MAX);
@@ -293,7 +293,7 @@ char *make_mbchar(int chr, int *chr_mb_len)
 #endif
        *chr_mb_len = 1;
        chr_mb = charalloc(1);  
-       chr_mb[0] = (char)chr;
+       *chr_mb = (char)chr;
 #ifdef NANO_WIDE
     }
 #endif
@@ -305,17 +305,15 @@ char *make_mbchar(int chr, int *chr_mb_len)
 /* Convert the string str to a valid multibyte string with the same wide
  * character values as str.  Return the (dynamically allocated)
  * multibyte string. */
-char *make_mbstring(char *str)
+char *make_mbstring(const char *str)
 {
     assert(str != NULL);
 
-    char *str_mb;
-
 #ifdef NANO_WIDE
     if (!ISSET(NO_UTF8)) {
        char *chr_mb = charalloc(MB_CUR_MAX);
        int chr_mb_len;
-       str_mb = charalloc((MB_CUR_MAX * strlen(str)) + 1);
+       char *str_mb = charalloc((MB_CUR_MAX * strlen(str)) + 1);
        size_t str_mb_len = 0;
 
        while (*str != '\0') {
@@ -328,7 +326,7 @@ char *make_mbstring(char *str)
                char *bad_chr_mb;
                int bad_chr_mb_len;
 
-               bad_chr_mb = make_mbchar((unsigned char)chr_mb[0],
+               bad_chr_mb = make_mbchar((unsigned char)*chr_mb,
                    &bad_chr_mb_len);
 
                for (i = 0; i < bad_chr_mb_len; i++)
@@ -351,7 +349,7 @@ char *make_mbstring(char *str)
        return str_mb;
      } else
 #endif
-       return mallocstrcpy(str_mb, str);
+       return mallocstrcpy(NULL, str);
 }
 #endif
 
index 01b9a9a2af4f1a34ec31ffe8660bf6026dffae1b..f5780014a2d57a35bbaea97575d97d372087793f 100644 (file)
@@ -176,7 +176,7 @@ int mbwidth(const char *c);
 int mb_cur_max(void);
 char *make_mbchar(int chr, int *chr_mb_len);
 #ifdef ENABLE_NANORC
-char *make_mbstring(char *str);
+char *make_mbstring(const char *str);
 #endif
 int parse_mbchar(const char *buf, char *chr, bool *bad_chr, size_t
        *col);
index 80aef2ec16fdb03cde83648d3bf3d5f64c02bb6e..e5044f319c207d91d06b8848f68bdf70c1b3ce70 100644 (file)
@@ -4051,10 +4051,7 @@ void do_credits(void)
        "David Benbennick",
        "Ken Tyler",
        "Sven Guckes",
-#ifdef NANO_WIDE
-       !ISSET(NO_UTF8) ? "Florian König" :
-#endif
-               "Florian König",
+       "Florian König",
        "Pauli Virtanen",
        "Daniele Medri",
        "Clement Laforet",
@@ -4121,6 +4118,7 @@ void do_credits(void)
     for (crpos = 0; crpos < CREDIT_LEN + editwinrows / 2; crpos++) {
        if (wgetch(edit) != ERR)
            break;
+
        if (crpos < CREDIT_LEN) {
            const char *what = credits[crpos];
            size_t start_x;
@@ -4134,6 +4132,7 @@ void do_credits(void)
            mvwaddstr(edit, editwinrows - 1 - editwinrows % 2, start_x,
                what);
        }
+
        napms(700);
        scroll(edit);
        wrefresh(edit);