Module Name: src Committed By: christos Date: Thu Jul 28 00:48:21 UTC 2011
Modified Files: src/lib/libedit: chartype.c Log Message: - fix memory allocation botch in wide strings - check mbstowcs return code To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/lib/libedit/chartype.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libedit/chartype.c diff -u src/lib/libedit/chartype.c:1.5 src/lib/libedit/chartype.c:1.6 --- src/lib/libedit/chartype.c:1.5 Tue Jul 26 22:18:30 2011 +++ src/lib/libedit/chartype.c Wed Jul 27 20:48:21 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: chartype.c,v 1.5 2011/07/27 02:18:30 christos Exp $ */ +/* $NetBSD: chartype.c,v 1.6 2011/07/28 00:48:21 christos Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ */ #include "config.h" #if !defined(lint) && !defined(SCCSID) -__RCSID("$NetBSD: chartype.c,v 1.5 2011/07/27 02:18:30 christos Exp $"); +__RCSID("$NetBSD: chartype.c,v 1.6 2011/07/28 00:48:21 christos Exp $"); #endif /* not lint && not SCCSID */ #include "el.h" #include <stdlib.h> @@ -52,7 +52,7 @@ void *p; if (mincsize > conv->csize) { conv->csize = mincsize; - p = el_realloc(conv->cbuff, conv->csize); + p = el_realloc(conv->cbuff, conv->csize * sizeof(char)); if (p == NULL) { conv->csize = 0; el_free(conv->cbuff); @@ -63,7 +63,7 @@ if (minwsize > conv->wsize) { conv->wsize = minwsize; - p = el_realloc(conv->wbuff, conv->wsize); + p = el_realloc(conv->wbuff, conv->wsize * sizeof(Char)); if (p == NULL) { conv->wsize = 0; el_free(conv->wbuff); @@ -119,7 +119,9 @@ if (!conv->wbuff) return NULL; - len = ct_mbstowcs(0, s, 0); + len = ct_mbstowcs(NULL, s, 0); + if (len == (size_t)-1) + return NULL; if (len > conv->wsize) ct_conv_buff_resize(conv, 0, len + 1); if (!conv->wbuff)