changeset 6745:7f9a158cf1d9 v7.4.695

patch 7.4.695 Problem: Out-of-bounds read, dectected by Coverity. Solution: Remember the value of cmap for the first matching encoding. Reset cmap to that value if first matching encoding is going to be used. (Eliseo Mart?nez)
author Bram Moolenaar <bram@vim.org>
date Mon, 13 Apr 2015 14:45:27 +0200
parents dff4e29c6905
children 121830531918
files src/hardcopy.c src/version.c
diffstat 2 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/hardcopy.c
+++ b/src/hardcopy.c
@@ -2513,13 +2513,18 @@ mch_print_init(psettings, jobname, force
     props = enc_canon_props(p_encoding);
     if (!(props & ENC_8BIT) && ((*p_pmcs != NUL) || !(props & ENC_UNICODE)))
     {
+	int cmap_first;
+
 	p_mbenc_first = NULL;
 	for (cmap = 0; cmap < (int)NUM_ELEMENTS(prt_ps_mbfonts); cmap++)
 	    if (prt_match_encoding((char *)p_encoding, &prt_ps_mbfonts[cmap],
 								    &p_mbenc))
 	    {
 		if (p_mbenc_first == NULL)
+		{
 		    p_mbenc_first = p_mbenc;
+		    cmap_first = cmap;
+		}
 		if (prt_match_charset((char *)p_pmcs, &prt_ps_mbfonts[cmap],
 								   &p_mbchar))
 		    break;
@@ -2527,7 +2532,10 @@ mch_print_init(psettings, jobname, force
 
 	/* Use first encoding matched if no charset matched */
 	if (p_mbchar == NULL && p_mbenc_first != NULL)
+	{
 	    p_mbenc = p_mbenc_first;
+	    cmap = cmap_first;
+	}
     }
 
     prt_out_mbyte = (p_mbenc != NULL);
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    695,
+/**/
     694,
 /**/
     693,