diff src/luan/modules/parsers/Html.java @ 1330:f41919741100

fix security
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 11 Feb 2019 01:38:55 -0700
parents 8d54bcc0b6d3
children 25746915a241
line wrap: on
line diff
--- a/src/luan/modules/parsers/Html.java	Sun Feb 10 02:01:49 2019 -0700
+++ b/src/luan/modules/parsers/Html.java	Mon Feb 11 01:38:55 2019 -0700
@@ -6,13 +6,18 @@
 import java.util.HashSet;
 import luan.LuanState;
 import luan.LuanTable;
+import luan.LuanException;
 import luan.lib.parser.Parser;
 
 
 public final class Html {
 
 	public static LuanTable toList(LuanState luan,String text,LuanTable containerTagsTbl) {
-		return new Html(luan,text,containerTagsTbl).parse();
+		try {
+			return new Html(luan,text,containerTagsTbl).parse();
+		} catch(LuanException e) {
+			throw new RuntimeException(e);
+		}
 	}
 
 	private final LuanState luan;
@@ -27,7 +32,7 @@
 		}
 	}
 
-	private LuanTable parse() {
+	private LuanTable parse() throws LuanException {
 		List list = new ArrayList();
 		StringBuilder sb = new StringBuilder();
 		while( !parser.endOfInput() ) {
@@ -61,7 +66,7 @@
 		return new LuanTable(luan,list);
 	}
 
-	private LuanTable parseComment() {
+	private LuanTable parseComment() throws LuanException {
 		parser.begin();
 		if( !parser.match("<!--") )
 			return parser.failure(null);
@@ -72,12 +77,12 @@
 		}
 		String text = parser.textFrom(start);
 		LuanTable tbl = new LuanTable(luan);
-		tbl.rawPut("type","comment");
-		tbl.rawPut("text",text);
+		tbl.put("type","comment");
+		tbl.put("text",text);
 		return parser.success(tbl);
 	}
 
-	private LuanTable parseCdata() {
+	private LuanTable parseCdata() throws LuanException {
 		parser.begin();
 		if( !parser.match("<![CDATA[") )
 			return parser.failure(null);
@@ -88,12 +93,12 @@
 		}
 		String text = parser.textFrom(start);
 		LuanTable tbl = new LuanTable(luan);
-		tbl.rawPut("type","cdata");
-		tbl.rawPut("text",text);
+		tbl.put("type","cdata");
+		tbl.put("text",text);
 		return parser.success(tbl);
 	}
 
-	private LuanTable parseContainer(LuanTable tag) {
+	private LuanTable parseContainer(LuanTable tag) throws LuanException {
 		String endTagName = '/' + (String)tag.rawGet("name");
 		int start = parser.begin();
 		int end;
@@ -110,15 +115,15 @@
 		}
 		String text = parser.text.substring(start,end);
 		LuanTable tbl = new LuanTable(luan);
-		tbl.rawPut("type","container");
-		tbl.rawPut("tag",tag);
-		tbl.rawPut("text",text);
+		tbl.put("type","container");
+		tbl.put("tag",tag);
+		tbl.put("text",text);
 		return parser.success(tbl);
 	}
 
-	private LuanTable parseTag() {
+	private LuanTable parseTag() throws LuanException {
 		LuanTable tbl = new LuanTable(luan);
-		tbl.rawPut("type","tag");
+		tbl.put("type","tag");
 		int tagStart = parser.begin();
 		if( !parser.match('<') )
 			return parser.failure(null);
@@ -128,26 +133,26 @@
 			return parser.failure(null);
 		while( matchNameChar() );
 		String name = parser.textFrom(start).toLowerCase();
-		tbl.rawPut("name",name);
+		tbl.put("name",name);
 		LuanTable attributes = new LuanTable(luan);
-		tbl.rawPut("attributes",attributes);
+		tbl.put("attributes",attributes);
 		String attrName;
 		while( (attrName = parseAttrName()) != null ) {
 			String attrValue = parseAttrValue();
-			attributes.rawPut( attrName, attrValue!=null ? attrValue : true );
+			attributes.put( attrName, attrValue!=null ? attrValue : true );
 			if( attrName.equals("style") && attrValue!=null ) {
 				LuanTable style = Css.style(luan,attrValue);
 				if( style!=null )
-					tbl.rawPut("style",style);
+					tbl.put("style",style);
 			}
 		}
 		while( matchSpace() );
 		boolean isEmpty = parser.match('/');
-		tbl.rawPut("is_empty",isEmpty);
+		tbl.put("is_empty",isEmpty);
 		if( !parser.match('>') )
 			return parser.failure(null);
 		String raw = parser.textFrom(tagStart);
-		tbl.rawPut("raw",raw);
+		tbl.put("raw",raw);
 		return parser.success(tbl);
 	}