Index: parser.c
===================================================================
--- parser.c	(revision 3773)
+++ parser.c	(working copy)
@@ -2505,6 +2505,11 @@ xmlStringLenDecodeEntities(xmlParserCtxt
 	    c = CUR_SCHAR(str, l);
 	else
 	    c = 0;
+        if ((nbchars > 500000) &&
+	    (ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE)) {
+	    xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
+	    goto int_error;
+        }
     }
     buffer[nbchars++] = 0;
     return(buffer);