throw exception for unsupported escape sequences
diff --git a/asterix-app/data/escapes-err-1.adm b/asterix-app/data/escapes-err-1.adm
new file mode 100644
index 0000000..5b70bc7
--- /dev/null
+++ b/asterix-app/data/escapes-err-1.adm
@@ -0,0 +1 @@
+{ "id": "a\bc" }
diff --git a/asterix-app/data/escapes.adm b/asterix-app/data/escapes.adm
index d8193c1..0fd9f20c 100644
--- a/asterix-app/data/escapes.adm
+++ b/asterix-app/data/escapes.adm
@@ -1,3 +1,5 @@
 { "id": "abc" }
 { "id": "\"abc\"" }
 { "id": "\\abc\\" }
+{ "id": "\\\\abc" }
+{ "id": "\\\"abc" }
diff --git a/asterix-app/src/test/resources/runtimets/queries/load/escapes-err-1/escapes-err-1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/load/escapes-err-1/escapes-err-1.1.ddl.aql
new file mode 100644
index 0000000..28a27d1
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/load/escapes-err-1/escapes-err-1.1.ddl.aql
@@ -0,0 +1,10 @@
+drop dataverse TestDataverse if exists;
+create dataverse TestDataverse;
+use dataverse TestDataverse;
+
+create type TestType as {
+  id: string
+}
+
+create dataset TestSet(TestType)
+primary key id;
diff --git a/asterix-app/src/test/resources/runtimets/queries/load/escapes-err-1/escapes-err-1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/load/escapes-err-1/escapes-err-1.2.update.aql
new file mode 100644
index 0000000..93a67f5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/load/escapes-err-1/escapes-err-1.2.update.aql
@@ -0,0 +1,3 @@
+use dataverse TestDataverse;
+
+load dataset TestSet using localfs (("path"="nc1://data/escapes-err-1.adm"),("format"="adm"));
diff --git a/asterix-app/src/test/resources/runtimets/results/load/escapes/escapes.1.adm b/asterix-app/src/test/resources/runtimets/results/load/escapes/escapes.1.adm
index 68d1632..adea811 100644
--- a/asterix-app/src/test/resources/runtimets/results/load/escapes/escapes.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/load/escapes/escapes.1.adm
@@ -1,3 +1,5 @@
 { "id": "\"abc\"" }
+{ "id": "\\\"abc" }
+{ "id": "\\\\abc" }
 { "id": "\\abc\\" }
 { "id": "abc" }
diff --git a/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterix-app/src/test/resources/runtimets/testsuite.xml
index 880c41f..d1297a4 100644
--- a/asterix-app/src/test/resources/runtimets/testsuite.xml
+++ b/asterix-app/src/test/resources/runtimets/testsuite.xml
@@ -4750,6 +4750,12 @@
         <output-dir compare="Text">escapes</output-dir>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="load">
+      <compilation-unit name="escapes-err-1">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.api.exceptions.HyracksException</expected-error>
+      </compilation-unit>
+    </test-case>
      <test-case FilePath="user-defined-functions">
       <compilation-unit name="query-issue244">
         <output-dir compare="Text">query-issue244</output-dir>
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java
index ac92355..012c5e9 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java
@@ -372,8 +372,27 @@
         }
     }
 
-    private String replaceEscapes(String tokenImage) {
-        return tokenImage.replace("\\\"", "\"").replace("\\\\", "\\");
+    private String replaceEscapes(String tokenImage) throws ParseException {
+        char[] chars = tokenImage.toCharArray();
+        int len = chars.length;
+        int idx = 0;
+        while (idx < len) {
+            if (chars[idx] == '\\') {
+                switch (chars[idx + 1]) {
+                    case '\\':
+                    case '\"':
+                        for (int i = idx + 1; i < len; ++i) {
+                            chars[i - 1] = chars[i];
+                        }
+                        --len;
+                        break;
+                    default:
+                        throw new ParseException("Illegal escape '\\" + chars[idx + 1] + "'");
+                }
+            }
+            ++idx;
+        }
+        return new String(chars, 0, len);
     }
 
     private IAType getComplexType(IAType aObjectType, ATypeTag tag) {