commit 0099a8f45c3718e97a8e1f063d51b7a137325042
parent 38156d4491cd2134874e6cdc8eed10e4bb584a35
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date: Tue, 15 Mar 2005 06:34:09 +0000
fix potential memory corruption problem in make_mbstring(), and also fix
compilation with -pedantic
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2372 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
3 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/src/chars.c b/src/chars.c
@@ -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
diff --git a/src/proto.h b/src/proto.h
@@ -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);
diff --git a/src/winio.c b/src/winio.c
@@ -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);