Module Name: src Committed By: christos Date: Mon Sep 8 16:42:09 UTC 2014
Modified Files: src/lib/libc/gen: vis.c Log Message: PR/49185: Conrad Meyer: strvisx: Handle zero-length input strings gracefully. (don't abuse 0 to mean compute string length internally) To generate a diff of this commit: cvs rdiff -u -r1.60 -r1.61 src/lib/libc/gen/vis.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/libc/gen/vis.c diff -u src/lib/libc/gen/vis.c:1.60 src/lib/libc/gen/vis.c:1.61 --- src/lib/libc/gen/vis.c:1.60 Thu Feb 21 11:21:20 2013 +++ src/lib/libc/gen/vis.c Mon Sep 8 12:42:09 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: vis.c,v 1.60 2013/02/21 16:21:20 joerg Exp $ */ +/* $NetBSD: vis.c,v 1.61 2014/09/08 16:42:09 christos Exp $ */ /*- * Copyright (c) 1989, 1993 @@ -57,7 +57,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: vis.c,v 1.60 2013/02/21 16:21:20 joerg Exp $"); +__RCSID("$NetBSD: vis.c,v 1.61 2014/09/08 16:42:09 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #ifdef __FBSDID __FBSDID("$FreeBSD$"); @@ -105,6 +105,7 @@ static wchar_t *do_svis(wchar_t *, wint_ #define XTOA(c) L"0123456789ABCDEF"[c] #define MAXEXTRAS 10 +#define MB_STRZ ((size_t)-1) #if !HAVE_NBTOOL_CONFIG_H #ifndef __NetBSD__ @@ -357,7 +358,7 @@ istrsenvisx(char *mbdst, size_t *dlen, c ssize_t mbslength, maxolen; _DIAGASSERT(mbdst != NULL); - _DIAGASSERT(mbsrc != NULL); + _DIAGASSERT(mbsrc != NULL || mblength == 0); _DIAGASSERT(mbextra != NULL); /* @@ -375,7 +376,7 @@ istrsenvisx(char *mbdst, size_t *dlen, c /* Allocate space for the wide char strings */ psrc = pdst = extra = NULL; - if (!mblength) + if (mblength == MB_STRZ) mblength = strlen(mbsrc); if ((psrc = calloc(mblength + 1, sizeof(*psrc))) == NULL) return -1; @@ -571,13 +572,13 @@ snvis(char *mbdst, size_t dlen, int c, i int strsvis(char *mbdst, const char *mbsrc, int flags, const char *mbextra) { - return istrsenvisx(mbdst, NULL, mbsrc, 0, flags, mbextra, NULL); + return istrsenvisx(mbdst, NULL, mbsrc, MB_STRZ, flags, mbextra, NULL); } int strsnvis(char *mbdst, size_t dlen, const char *mbsrc, int flags, const char *mbextra) { - return istrsenvisx(mbdst, &dlen, mbsrc, 0, flags, mbextra, NULL); + return istrsenvisx(mbdst, &dlen, mbsrc, MB_STRZ, flags, mbextra, NULL); } int @@ -646,13 +647,13 @@ nvis(char *mbdst, size_t dlen, int c, in int strvis(char *mbdst, const char *mbsrc, int flags) { - return istrsenvisx(mbdst, NULL, mbsrc, 0, flags, "", NULL); + return istrsenvisx(mbdst, NULL, mbsrc, MB_STRZ, flags, "", NULL); } int strnvis(char *mbdst, size_t dlen, const char *mbsrc, int flags) { - return istrsenvisx(mbdst, &dlen, mbsrc, 0, flags, "", NULL); + return istrsenvisx(mbdst, &dlen, mbsrc, MB_STRZ, flags, "", NULL); } /*