Check for multipication overrun.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21362 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		@@ -394,19 +394,31 @@ decode_type (const char *name, const Type *t, int optional,
 | 
				
			|||||||
		 "{\n"
 | 
							 "{\n"
 | 
				
			||||||
		 "size_t %s_origlen = len;\n"
 | 
							 "size_t %s_origlen = len;\n"
 | 
				
			||||||
		 "size_t %s_oldret = ret;\n"
 | 
							 "size_t %s_oldret = ret;\n"
 | 
				
			||||||
 | 
							 "size_t %s_olen = 0;\n"
 | 
				
			||||||
		 "void *%s_tmp;\n"
 | 
							 "void *%s_tmp;\n"
 | 
				
			||||||
		 "ret = 0;\n"
 | 
							 "ret = 0;\n"
 | 
				
			||||||
		 "(%s)->len = 0;\n"
 | 
							 "(%s)->len = 0;\n"
 | 
				
			||||||
		 "(%s)->val = NULL;\n"
 | 
							 "(%s)->val = NULL;\n",
 | 
				
			||||||
 | 
							 tmpstr,
 | 
				
			||||||
 | 
							 tmpstr,
 | 
				
			||||||
 | 
							 tmpstr,
 | 
				
			||||||
 | 
							 tmpstr,
 | 
				
			||||||
 | 
							 name,
 | 
				
			||||||
 | 
							 name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fprintf (codefile,
 | 
				
			||||||
		 "while(ret < %s_origlen) {\n"
 | 
							 "while(ret < %s_origlen) {\n"
 | 
				
			||||||
		 "%s_tmp = realloc((%s)->val, "
 | 
							 "size_t %s_nlen = %s_olen + sizeof(*((%s)->val));\n"
 | 
				
			||||||
		 "    sizeof(*((%s)->val)) * ((%s)->len + 1));\n"
 | 
							 "if (%s_olen > %s_nlen) { e = ASN1_OVERFLOW; %s; }\n"
 | 
				
			||||||
		 "if (%s_tmp == NULL) { %s; }\n"
 | 
							 "%s_olen = %s_nlen;\n"
 | 
				
			||||||
 | 
							 "%s_tmp = realloc((%s)->val, %s_olen);\n"
 | 
				
			||||||
 | 
							 "if (%s_tmp == NULL) { e = ENOMEM; %s; }\n"
 | 
				
			||||||
		 "(%s)->val = %s_tmp;\n",
 | 
							 "(%s)->val = %s_tmp;\n",
 | 
				
			||||||
		 tmpstr, tmpstr, tmpstr,
 | 
							 tmpstr,
 | 
				
			||||||
		 name, name,
 | 
							 tmpstr, tmpstr, name,
 | 
				
			||||||
 | 
							 tmpstr, tmpstr, forwstr,
 | 
				
			||||||
		 tmpstr, tmpstr,
 | 
							 tmpstr, tmpstr,
 | 
				
			||||||
		 name, name, name,
 | 
							 tmpstr, name, tmpstr,
 | 
				
			||||||
		 tmpstr, forwstr, 
 | 
							 tmpstr, forwstr, 
 | 
				
			||||||
		 name, tmpstr);
 | 
							 name, tmpstr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user