diff --git a/javascript/extractor/src/com/semmle/js/extractor/YAMLExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/YAMLExtractor.java index 1eecc7d749fd..c1917492fb2a 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/YAMLExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/YAMLExtractor.java @@ -166,8 +166,10 @@ private void extractNode(Label parent, int idx) { NodeId.scalar, scalar.getValue(), scalar.getImplicit().canOmitTagInPlainScalar()); + Character style = scalar.getStyle(); + int styleCode = style == null ? 0 : (int) style; trapWriter.addTuple( - YAMLTables.YAML_SCALARS, label, (int) scalar.getStyle(), scalar.getValue()); + YAMLTables.YAML_SCALARS, label, styleCode, scalar.getValue()); } else if (start.is(Event.ID.SequenceStart)) { kind = NodeKind.SEQUENCE; SequenceStartEvent sequenceStart = (SequenceStartEvent) start; @@ -226,16 +228,19 @@ private String getTag(String explicitTag, NodeId kind, String value, boolean imp * n characters, where n is the number of spaces preceding the caret character on * the second line. * - *
This is only an approximation, since the context never extends across newlines, but it
- * suffices for the purposes of toString.
+ *
This is only an approximation, since the context is limited to relatively short strings that
+ * never extend across newlines, but it suffices for the purposes of toString.
*/
private String mkToString(Mark startMark, Mark endMark) {
String snippet = startMark.get_snippet(0, Integer.MAX_VALUE);
int nl = snippet.indexOf('\n');
String context = snippet.substring(0, nl);
String src = context.substring(snippet.substring(nl + 1).indexOf('^'));
- if (endMark.getLine() == startMark.getLine())
- src = src.substring(0, endMark.getColumn() - startMark.getColumn());
+ int desiredStringLength = endMark.getColumn() - startMark.getColumn();
+ boolean hasAccessToDesiredString = src.length() >= desiredStringLength;
+ boolean isSingleLine = endMark.getLine() == startMark.getLine();
+ if (isSingleLine && hasAccessToDesiredString)
+ src = src.substring(0, desiredStringLength);
return TextualExtractor.sanitiseToString(src);
}
diff --git a/javascript/extractor/tests/yaml/input/bad_1022_1_1.yml b/javascript/extractor/tests/yaml/input/bad_1022_1_1.yml
new file mode 100644
index 000000000000..5f80777d2dd0
--- /dev/null
+++ b/javascript/extractor/tests/yaml/input/bad_1022_1_1.yml
@@ -0,0 +1 @@
+x:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\ No newline at end of file
diff --git a/javascript/extractor/tests/yaml/input/good_1021_1_1.yml b/javascript/extractor/tests/yaml/input/good_1021_1_1.yml
new file mode 100644
index 000000000000..0f812e2cd793
--- /dev/null
+++ b/javascript/extractor/tests/yaml/input/good_1021_1_1.yml
@@ -0,0 +1 @@
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:x
\ No newline at end of file
diff --git a/javascript/extractor/tests/yaml/input/good_1_1_1021.yml b/javascript/extractor/tests/yaml/input/good_1_1_1021.yml
new file mode 100644
index 000000000000..5f80777d2dd0
--- /dev/null
+++ b/javascript/extractor/tests/yaml/input/good_1_1_1021.yml
@@ -0,0 +1 @@
+x:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\ No newline at end of file
diff --git a/javascript/extractor/tests/yaml/input/orig.yml b/javascript/extractor/tests/yaml/input/orig.yml
new file mode 100644
index 000000000000..72254c84daea
--- /dev/null
+++ b/javascript/extractor/tests/yaml/input/orig.yml
@@ -0,0 +1,26 @@
+xxxxxxxx: xxxx_xx
+
+xxxxxx_xxxxxx:
+ - xx [[ "$xxxxxx_xx_xxxx" == "xxxxx" ]]; xxxx xxxxxx xxxxxxx=:xx.x; xx -x /xxx/xxxx.x/xxxx xxxxx; xx
+
+xxxxxx:
+ xxxxxxx:
+ - xx: xxxxx
+ xxxx: xxxxxxxx
+ xxxx: xxxxxx
+# - xx: xxx
+# xxx_xxxxx: xxxxxx.x
+
+xxxxx:
+ xxxxxxxxxxx:
+ - xxxx_xxxxxxx
+
+xxxxxx:
+ xxxx_xxxxxxx: xxxx
+ xxxxxxxx: xxxxxx
+ xxxxxx: xxx xxx xxxx
+
+xxx:
+ xxxxxx:
+ # xx_xxxxx
+ xxxxxx: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxx/xxxxxx/xxxxxxxxxxxxxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxx/xxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxx=
diff --git a/javascript/extractor/tests/yaml/input/x_bad_1_1_1022.yml b/javascript/extractor/tests/yaml/input/x_bad_1_1_1022.yml
new file mode 100644
index 000000000000..baef1a4a12b6
--- /dev/null
+++ b/javascript/extractor/tests/yaml/input/x_bad_1_1_1022.yml
@@ -0,0 +1 @@
+x:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\ No newline at end of file
diff --git a/javascript/extractor/tests/yaml/output/trap/bad_1022_1_1.yml.trap b/javascript/extractor/tests/yaml/output/trap/bad_1022_1_1.yml.trap
new file mode 100644
index 000000000000..3a546565c909
--- /dev/null
+++ b/javascript/extractor/tests/yaml/output/trap/bad_1022_1_1.yml.trap
@@ -0,0 +1,16 @@
+#10000=@"/bad_1022_1_1.yml;sourcefile"
+files(#10000,"/bad_1022_1_1.yml","bad_1022_1_1","yml",0)
+#10001=@"/;folder"
+folders(#10001,"/","")
+containerparent(#10001,#10000)
+#10002=@"loc,{#10000},0,0,0,0"
+locations_default(#10002,#10000,0,0,0,0)
+hasLocation(#10000,#10002)
+#20000=*
+yaml_scalars(#20000,0,"x:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
+yaml(#20000,0,#10000,0,"tag:yaml.org,2002:str","x:xxxxx ... xxxxxxx")
+#20001=@"loc,{#10000},1,1,1,1024"
+locations_default(#20001,#10000,1,1,1,1024)
+hasLocation(#20000,#20001)
+numlines(#10000,1,0,0)
+filetype(#10000,"yaml")
diff --git a/javascript/extractor/tests/yaml/output/trap/good_1021_1_1.yml.trap b/javascript/extractor/tests/yaml/output/trap/good_1021_1_1.yml.trap
new file mode 100644
index 000000000000..f97a4377541c
--- /dev/null
+++ b/javascript/extractor/tests/yaml/output/trap/good_1021_1_1.yml.trap
@@ -0,0 +1,16 @@
+#10000=@"/good_1021_1_1.yml;sourcefile"
+files(#10000,"/good_1021_1_1.yml","good_1021_1_1","yml",0)
+#10001=@"/;folder"
+folders(#10001,"/","")
+containerparent(#10001,#10000)
+#10002=@"loc,{#10000},0,0,0,0"
+locations_default(#10002,#10000,0,0,0,0)
+hasLocation(#10000,#10002)
+#20000=*
+yaml_scalars(#20000,0,"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:x")
+yaml(#20000,0,#10000,0,"tag:yaml.org,2002:str","xxxxxxx ... xxxxx:x")
+#20001=@"loc,{#10000},1,1,1,1024"
+locations_default(#20001,#10000,1,1,1,1024)
+hasLocation(#20000,#20001)
+numlines(#10000,1,0,0)
+filetype(#10000,"yaml")
diff --git a/javascript/extractor/tests/yaml/output/trap/good_1_1_1021.yml.trap b/javascript/extractor/tests/yaml/output/trap/good_1_1_1021.yml.trap
new file mode 100644
index 000000000000..39575f9b6823
--- /dev/null
+++ b/javascript/extractor/tests/yaml/output/trap/good_1_1_1021.yml.trap
@@ -0,0 +1,16 @@
+#10000=@"/good_1_1_1021.yml;sourcefile"
+files(#10000,"/good_1_1_1021.yml","good_1_1_1021","yml",0)
+#10001=@"/;folder"
+folders(#10001,"/","")
+containerparent(#10001,#10000)
+#10002=@"loc,{#10000},0,0,0,0"
+locations_default(#10002,#10000,0,0,0,0)
+hasLocation(#10000,#10002)
+#20000=*
+yaml_scalars(#20000,0,"x:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
+yaml(#20000,0,#10000,0,"tag:yaml.org,2002:str","x:xxxxx ... xxxxxxx")
+#20001=@"loc,{#10000},1,1,1,1024"
+locations_default(#20001,#10000,1,1,1,1024)
+hasLocation(#20000,#20001)
+numlines(#10000,1,0,0)
+filetype(#10000,"yaml")
diff --git a/javascript/extractor/tests/yaml/output/trap/orig.yml.trap b/javascript/extractor/tests/yaml/output/trap/orig.yml.trap
new file mode 100644
index 000000000000..c5b7b26d389e
--- /dev/null
+++ b/javascript/extractor/tests/yaml/output/trap/orig.yml.trap
@@ -0,0 +1,216 @@
+#10000=@"/orig.yml;sourcefile"
+files(#10000,"/orig.yml","orig","yml",0)
+#10001=@"/;folder"
+folders(#10001,"/","")
+containerparent(#10001,#10000)
+#10002=@"loc,{#10000},0,0,0,0"
+locations_default(#10002,#10000,0,0,0,0)
+hasLocation(#10000,#10002)
+#20000=*
+#20001=*
+yaml_scalars(#20001,0,"xxxxxxxx")
+yaml(#20001,0,#20000,1,"tag:yaml.org,2002:str","xxxxxxxx")
+#20002=@"loc,{#10000},1,1,1,8"
+locations_default(#20002,#10000,1,1,1,8)
+hasLocation(#20001,#20002)
+#20003=*
+yaml_scalars(#20003,0,"xxxx_xx")
+yaml(#20003,0,#20000,-1,"tag:yaml.org,2002:str","xxxx_xx")
+#20004=@"loc,{#10000},1,11,1,17"
+locations_default(#20004,#10000,1,11,1,17)
+hasLocation(#20003,#20004)
+#20005=*
+yaml_scalars(#20005,0,"xxxxxx_xxxxxx")
+yaml(#20005,0,#20000,2,"tag:yaml.org,2002:str","xxxxxx_xxxxxx")
+#20006=@"loc,{#10000},3,1,3,13"
+locations_default(#20006,#10000,3,1,3,13)
+hasLocation(#20005,#20006)
+#20007=*
+#20008=*
+yaml_scalars(#20008,0,"xx [[ ""$xxxxxx_xx_xxxx"" == ""xxxxx"" ]]; xxxx xxxxxx xxxxxxx=:xx.x; xx -x /xxx/xxxx.x/xxxx xxxxx; xx")
+yaml(#20008,0,#20007,0,"tag:yaml.org,2002:str","xx [[ "" ... xxx; xx")
+#20009=@"loc,{#10000},4,5,4,102"
+locations_default(#20009,#10000,4,5,4,102)
+hasLocation(#20008,#20009)
+yaml(#20007,2,#20000,-2,"tag:yaml.org,2002:seq","- xx [[ ... xxx; xx")
+#20010=@"loc,{#10000},4,3,6,0"
+locations_default(#20010,#10000,4,3,6,0)
+hasLocation(#20007,#20010)
+#20011=*
+yaml_scalars(#20011,0,"xxxxxx")
+yaml(#20011,0,#20000,3,"tag:yaml.org,2002:str","xxxxxx")
+#20012=@"loc,{#10000},6,1,6,6"
+locations_default(#20012,#10000,6,1,6,6)
+hasLocation(#20011,#20012)
+#20013=*
+#20014=*
+yaml_scalars(#20014,0,"xxxxxxx")
+yaml(#20014,0,#20013,1,"tag:yaml.org,2002:str","xxxxxxx")
+#20015=@"loc,{#10000},7,3,7,9"
+locations_default(#20015,#10000,7,3,7,9)
+hasLocation(#20014,#20015)
+#20016=*
+#20017=*
+#20018=*
+yaml_scalars(#20018,0,"xx")
+yaml(#20018,0,#20017,1,"tag:yaml.org,2002:str","xx")
+#20019=@"loc,{#10000},8,7,8,8"
+locations_default(#20019,#10000,8,7,8,8)
+hasLocation(#20018,#20019)
+#20020=*
+yaml_scalars(#20020,0,"xxxxx")
+yaml(#20020,0,#20017,-1,"tag:yaml.org,2002:str","xxxxx")
+#20021=@"loc,{#10000},8,11,8,15"
+locations_default(#20021,#10000,8,11,8,15)
+hasLocation(#20020,#20021)
+#20022=*
+yaml_scalars(#20022,0,"xxxx")
+yaml(#20022,0,#20017,2,"tag:yaml.org,2002:str","xxxx")
+#20023=@"loc,{#10000},9,7,9,10"
+locations_default(#20023,#10000,9,7,9,10)
+hasLocation(#20022,#20023)
+#20024=*
+yaml_scalars(#20024,0,"xxxxxxxx")
+yaml(#20024,0,#20017,-2,"tag:yaml.org,2002:str","xxxxxxxx")
+#20025=@"loc,{#10000},9,13,9,20"
+locations_default(#20025,#10000,9,13,9,20)
+hasLocation(#20024,#20025)
+#20026=*
+yaml_scalars(#20026,0,"xxxx")
+yaml(#20026,0,#20017,3,"tag:yaml.org,2002:str","xxxx")
+#20027=@"loc,{#10000},10,7,10,10"
+locations_default(#20027,#10000,10,7,10,10)
+hasLocation(#20026,#20027)
+#20028=*
+yaml_scalars(#20028,0,"xxxxxx")
+yaml(#20028,0,#20017,-3,"tag:yaml.org,2002:str","xxxxxx")
+#20029=@"loc,{#10000},10,13,10,18"
+locations_default(#20029,#10000,10,13,10,18)
+hasLocation(#20028,#20029)
+yaml(#20017,1,#20016,0,"tag:yaml.org,2002:map","xx: xxxxx")
+#20030=@"loc,{#10000},8,7,14,0"
+locations_default(#20030,#10000,8,7,14,0)
+hasLocation(#20017,#20030)
+yaml(#20016,2,#20013,-1,"tag:yaml.org,2002:seq","- xx: xxxxx")
+#20031=@"loc,{#10000},8,5,14,0"
+locations_default(#20031,#10000,8,5,14,0)
+hasLocation(#20016,#20031)
+yaml(#20013,1,#20000,-3,"tag:yaml.org,2002:map","xxxxxxx:")
+#20032=@"loc,{#10000},7,3,14,0"
+locations_default(#20032,#10000,7,3,14,0)
+hasLocation(#20013,#20032)
+#20033=*
+yaml_scalars(#20033,0,"xxxxx")
+yaml(#20033,0,#20000,4,"tag:yaml.org,2002:str","xxxxx")
+#20034=@"loc,{#10000},14,1,14,5"
+locations_default(#20034,#10000,14,1,14,5)
+hasLocation(#20033,#20034)
+#20035=*
+#20036=*
+yaml_scalars(#20036,0,"xxxxxxxxxxx")
+yaml(#20036,0,#20035,1,"tag:yaml.org,2002:str","xxxxxxxxxxx")
+#20037=@"loc,{#10000},15,3,15,13"
+locations_default(#20037,#10000,15,3,15,13)
+hasLocation(#20036,#20037)
+#20038=*
+#20039=*
+yaml_scalars(#20039,0,"xxxx_xxxxxxx")
+yaml(#20039,0,#20038,0,"tag:yaml.org,2002:str","xxxx_xxxxxxx")
+#20040=@"loc,{#10000},16,7,16,18"
+locations_default(#20040,#10000,16,7,16,18)
+hasLocation(#20039,#20040)
+yaml(#20038,2,#20035,-1,"tag:yaml.org,2002:seq","- xxxx_xxxxxxx")
+#20041=@"loc,{#10000},16,5,18,0"
+locations_default(#20041,#10000,16,5,18,0)
+hasLocation(#20038,#20041)
+yaml(#20035,1,#20000,-4,"tag:yaml.org,2002:map","xxxxxxxxxxx:")
+#20042=@"loc,{#10000},15,3,18,0"
+locations_default(#20042,#10000,15,3,18,0)
+hasLocation(#20035,#20042)
+#20043=*
+yaml_scalars(#20043,0,"xxxxxx")
+yaml(#20043,0,#20000,5,"tag:yaml.org,2002:str","xxxxxx")
+#20044=@"loc,{#10000},18,1,18,6"
+locations_default(#20044,#10000,18,1,18,6)
+hasLocation(#20043,#20044)
+#20045=*
+#20046=*
+yaml_scalars(#20046,0,"xxxx_xxxxxxx")
+yaml(#20046,0,#20045,1,"tag:yaml.org,2002:str","xxxx_xxxxxxx")
+#20047=@"loc,{#10000},19,3,19,14"
+locations_default(#20047,#10000,19,3,19,14)
+hasLocation(#20046,#20047)
+#20048=*
+yaml_scalars(#20048,0,"xxxx")
+yaml(#20048,0,#20045,-1,"tag:yaml.org,2002:str","xxxx")
+#20049=@"loc,{#10000},19,17,19,20"
+locations_default(#20049,#10000,19,17,19,20)
+hasLocation(#20048,#20049)
+#20050=*
+yaml_scalars(#20050,0,"xxxxxxxx")
+yaml(#20050,0,#20045,2,"tag:yaml.org,2002:str","xxxxxxxx")
+#20051=@"loc,{#10000},20,3,20,10"
+locations_default(#20051,#10000,20,3,20,10)
+hasLocation(#20050,#20051)
+#20052=*
+yaml_scalars(#20052,0,"xxxxxx")
+yaml(#20052,0,#20045,-2,"tag:yaml.org,2002:str","xxxxxx")
+#20053=@"loc,{#10000},20,13,20,18"
+locations_default(#20053,#10000,20,13,20,18)
+hasLocation(#20052,#20053)
+#20054=*
+yaml_scalars(#20054,0,"xxxxxx")
+yaml(#20054,0,#20045,3,"tag:yaml.org,2002:str","xxxxxx")
+#20055=@"loc,{#10000},21,3,21,8"
+locations_default(#20055,#10000,21,3,21,8)
+hasLocation(#20054,#20055)
+#20056=*
+yaml_scalars(#20056,0,"xxx xxx xxxx")
+yaml(#20056,0,#20045,-3,"tag:yaml.org,2002:str","xxx xxx xxxx")
+#20057=@"loc,{#10000},21,11,21,22"
+locations_default(#20057,#10000,21,11,21,22)
+hasLocation(#20056,#20057)
+yaml(#20045,1,#20000,-5,"tag:yaml.org,2002:map","xxxx_xxxxxxx: xxxx")
+#20058=@"loc,{#10000},19,3,23,0"
+locations_default(#20058,#10000,19,3,23,0)
+hasLocation(#20045,#20058)
+#20059=*
+yaml_scalars(#20059,0,"xxx")
+yaml(#20059,0,#20000,6,"tag:yaml.org,2002:str","xxx")
+#20060=@"loc,{#10000},23,1,23,3"
+locations_default(#20060,#10000,23,1,23,3)
+hasLocation(#20059,#20060)
+#20061=*
+#20062=*
+yaml_scalars(#20062,0,"xxxxxx")
+yaml(#20062,0,#20061,1,"tag:yaml.org,2002:str","xxxxxx")
+#20063=@"loc,{#10000},24,3,24,8"
+locations_default(#20063,#10000,24,3,24,8)
+hasLocation(#20062,#20063)
+#20064=*
+#20065=*
+yaml_scalars(#20065,0,"xxxxxx")
+yaml(#20065,0,#20064,1,"tag:yaml.org,2002:str","xxxxxx")
+#20066=@"loc,{#10000},26,5,26,10"
+locations_default(#20066,#10000,26,5,26,10)
+hasLocation(#20065,#20066)
+#20067=*
+yaml_scalars(#20067,0,"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxx/xxxxxx/xxxxxxxxxxxxxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxx/xxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxx=")
+yaml(#20067,0,#20064,-1,"tag:yaml.org,2002:str","xxxxxxx ... xxxxxx=")
+#20068=@"loc,{#10000},26,13,26,696"
+locations_default(#20068,#10000,26,13,26,696)
+hasLocation(#20067,#20068)
+yaml(#20064,1,#20061,-1,"tag:yaml.org,2002:map","xxxxxx: ... xxxxxx=")
+#20069=@"loc,{#10000},26,5,27,0"
+locations_default(#20069,#10000,26,5,27,0)
+hasLocation(#20064,#20069)
+yaml(#20061,1,#20000,-6,"tag:yaml.org,2002:map","xxxxxx:")
+#20070=@"loc,{#10000},24,3,27,0"
+locations_default(#20070,#10000,24,3,27,0)
+hasLocation(#20061,#20070)
+yaml(#20000,1,#10000,0,"tag:yaml.org,2002:map","xxxxxxxx: xxxx_xx")
+#20071=@"loc,{#10000},1,1,27,0"
+locations_default(#20071,#10000,1,1,27,0)
+hasLocation(#20000,#20071)
+numlines(#10000,26,0,0)
+filetype(#10000,"yaml")
diff --git a/javascript/extractor/tests/yaml/output/trap/x_bad_1_1_1022.yml.trap b/javascript/extractor/tests/yaml/output/trap/x_bad_1_1_1022.yml.trap
new file mode 100644
index 000000000000..6cf53b809bd4
--- /dev/null
+++ b/javascript/extractor/tests/yaml/output/trap/x_bad_1_1_1022.yml.trap
@@ -0,0 +1,16 @@
+#10000=@"/x_bad_1_1_1022.yml;sourcefile"
+files(#10000,"/x_bad_1_1_1022.yml","x_bad_1_1_1022","yml",0)
+#10001=@"/;folder"
+folders(#10001,"/","")
+containerparent(#10001,#10000)
+#10002=@"loc,{#10000},0,0,0,0"
+locations_default(#10002,#10000,0,0,0,0)
+hasLocation(#10000,#10002)
+#20000=*
+yaml_scalars(#20000,0,"x:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
+yaml(#20000,0,#10000,0,"tag:yaml.org,2002:str","x:xxxxx ... xxxxxxx")
+#20001=@"loc,{#10000},1,1,1,1025"
+locations_default(#20001,#10000,1,1,1,1025)
+hasLocation(#20000,#20001)
+numlines(#10000,1,0,0)
+filetype(#10000,"yaml")