Skip to content

Instantly share code, notes, and snippets.

@alexanderkyte
Created April 29, 2019 16:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexanderkyte/d7bc0222cbcf7135f2513f99556ddd80 to your computer and use it in GitHub Desktop.
Save alexanderkyte/d7bc0222cbcf7135f2513f99556ddd80 to your computer and use it in GitHub Desktop.
akyte@Alexanders-MacBook-Pro-3 ~/Projects/SpanCrash/SpanCrash/bin/Debug (master*) $ MONO_VERBOSE_METHOD="ConstStrLen" MONO_EXECUTABLE="/Users/akyte/mono_llvm_opt/mono/mini/mono-sgen --" MONO_PATH=/Users/akyte/mono_llvm_opt/mcs/class/lib/net_4_x /Users/akyte/mono_llvm_opt/runtime/mono-wrapper --aot-path=/Users/akyte/mono_llvm_opt/mcs/class/lib/net_4_x --aot=llvm SpanCrash.exe
Mono Ahead of Time compiler - compiling assembly /Users/akyte/Projects/SpanCrash/SpanCrash/bin/Debug/SpanCrash.exe
AOTID FACB7FE7-D5C2-86F3-D9CD-FE9BF24E6B86
Executing opt: "opt" -f -O2 -disable-tail-calls -place-safepoints -spp-all-backedges -o "mono_aot_qw78ek/temp.opt.bc" "mono_aot_qw78ek/temp.bc"
Executing llc: "llc" -march=x86-64 -mcpu=generic -asm-verbose=false -disable-gnu-eh-frame -enable-mono-eh-frame -mono-eh-frame-symbol=_mono_aot_SpanCrash_eh_frame -disable-tail-calls -no-x86-call-frame-opt -relocation-model=pic -filetype=obj -o "mono_aot_qw78ek/temp-llvm.o" "mono_aot_qw78ek/temp.opt.bc"
Compiled: 8/8
Executing the native assembler: "clang" -c -x assembler -o /var/folders/00/v8q_733j1hd8br7nxhxs41d80000gn/T/mono_aot_hc3plt.o /var/folders/00/v8q_733j1hd8br7nxhxs41d80000gn/T/mono_aot_hc3plt
Executing the native linker: clang --shared -o /Users/akyte/Projects/SpanCrash/SpanCrash/bin/Debug/SpanCrash.exe.dylib.tmp "mono_aot_qw78ek/temp-llvm.o" /var/folders/00/v8q_733j1hd8br7nxhxs41d80000gn/T/mono_aot_hc3plt.o
Executing dsymutil: dsymutil "/Users/akyte/Projects/SpanCrash/SpanCrash/bin/Debug/SpanCrash.exe.dylib"
warning: no debug symbols in executable (-arch x86_64)
JIT time: 6 ms, Generation time: 251 ms, Assembly+Link time: 116 ms.
using System;
using System.Runtime.CompilerServices;
namespace SpanCrash
{
class MainClass
{
[MethodImpl(MethodImplOptions.NoInlining)]
private static int SpanIndexOf(byte[] backingArray)
{
byte ByteLF = (byte)'\n';
var span = new Span<byte>(backingArray);
return span.IndexOf(ByteLF);
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static void AssertOnBytes()
{
byte[] backingArray = new byte[195];
backingArray[0] = (byte)71;
backingArray[1] = (byte)69;
backingArray[2] = (byte)84;
backingArray[3] = (byte)32;
backingArray[4] = (byte)47;
backingArray[5] = (byte)112;
backingArray[6] = (byte)108;
backingArray[7] = (byte)97;
backingArray[8] = (byte)105;
backingArray[9] = (byte)110;
backingArray[10] = (byte)116;
backingArray[11] = (byte)101;
backingArray[12] = (byte)120;
backingArray[13] = (byte)116;
backingArray[14] = (byte)32;
backingArray[15] = (byte)72;
backingArray[16] = (byte)84;
backingArray[17] = (byte)84;
backingArray[18] = (byte)80;
backingArray[19] = (byte)47;
backingArray[20] = (byte)49;
backingArray[21] = (byte)46;
backingArray[22] = (byte)49;
backingArray[23] = (byte)13;
backingArray[24] = (byte)10;
backingArray[25] = (byte)72;
backingArray[26] = (byte)111;
backingArray[27] = (byte)115;
backingArray[28] = (byte)116;
backingArray[29] = (byte)58;
backingArray[30] = (byte)32;
backingArray[31] = (byte)49;
backingArray[32] = (byte)50;
backingArray[33] = (byte)55;
backingArray[34] = (byte)46;
backingArray[35] = (byte)48;
backingArray[36] = (byte)46;
backingArray[37] = (byte)48;
backingArray[38] = (byte)46;
backingArray[39] = (byte)49;
backingArray[40] = (byte)58;
backingArray[41] = (byte)56;
backingArray[42] = (byte)48;
backingArray[43] = (byte)56;
backingArray[44] = (byte)48;
backingArray[45] = (byte)13;
backingArray[46] = (byte)10;
backingArray[47] = (byte)85;
backingArray[48] = (byte)115;
backingArray[49] = (byte)101;
backingArray[50] = (byte)114;
backingArray[51] = (byte)45;
backingArray[52] = (byte)65;
backingArray[53] = (byte)103;
backingArray[54] = (byte)101;
backingArray[55] = (byte)110;
backingArray[56] = (byte)116;
backingArray[57] = (byte)58;
backingArray[58] = (byte)32;
backingArray[59] = (byte)99;
backingArray[60] = (byte)117;
backingArray[61] = (byte)114;
backingArray[62] = (byte)108;
backingArray[63] = (byte)47;
backingArray[64] = (byte)55;
backingArray[65] = (byte)46;
backingArray[66] = (byte)52;
backingArray[67] = (byte)55;
backingArray[68] = (byte)46;
backingArray[69] = (byte)48;
backingArray[70] = (byte)13;
backingArray[71] = (byte)10;
backingArray[72] = (byte)65;
backingArray[73] = (byte)99;
backingArray[74] = (byte)99;
backingArray[75] = (byte)101;
backingArray[76] = (byte)112;
backingArray[77] = (byte)116;
backingArray[78] = (byte)58;
backingArray[79] = (byte)32;
backingArray[80] = (byte)116;
backingArray[81] = (byte)101;
backingArray[82] = (byte)120;
backingArray[83] = (byte)116;
backingArray[84] = (byte)47;
backingArray[85] = (byte)112;
backingArray[86] = (byte)108;
backingArray[87] = (byte)97;
backingArray[88] = (byte)105;
backingArray[89] = (byte)110;
backingArray[90] = (byte)44;
backingArray[91] = (byte)116;
backingArray[92] = (byte)101;
backingArray[93] = (byte)120;
backingArray[94] = (byte)116;
backingArray[95] = (byte)47;
backingArray[96] = (byte)104;
backingArray[97] = (byte)116;
backingArray[98] = (byte)109;
backingArray[99] = (byte)108;
backingArray[100] = (byte)59;
backingArray[101] = (byte)113;
backingArray[102] = (byte)61;
backingArray[103] = (byte)48;
backingArray[104] = (byte)46;
backingArray[105] = (byte)57;
backingArray[106] = (byte)44;
backingArray[107] = (byte)97;
backingArray[108] = (byte)112;
backingArray[109] = (byte)112;
backingArray[110] = (byte)108;
backingArray[111] = (byte)105;
backingArray[112] = (byte)99;
backingArray[113] = (byte)97;
backingArray[114] = (byte)116;
backingArray[115] = (byte)105;
backingArray[116] = (byte)111;
backingArray[117] = (byte)110;
backingArray[118] = (byte)47;
backingArray[119] = (byte)120;
backingArray[120] = (byte)104;
backingArray[121] = (byte)116;
backingArray[122] = (byte)109;
backingArray[123] = (byte)108;
backingArray[124] = (byte)43;
backingArray[125] = (byte)120;
backingArray[126] = (byte)109;
backingArray[127] = (byte)108;
backingArray[128] = (byte)59;
backingArray[129] = (byte)113;
backingArray[130] = (byte)61;
backingArray[131] = (byte)48;
backingArray[132] = (byte)46;
backingArray[133] = (byte)57;
backingArray[134] = (byte)44;
backingArray[135] = (byte)97;
backingArray[136] = (byte)112;
backingArray[137] = (byte)112;
backingArray[138] = (byte)108;
backingArray[139] = (byte)105;
backingArray[140] = (byte)99;
backingArray[141] = (byte)97;
backingArray[142] = (byte)116;
backingArray[143] = (byte)105;
backingArray[144] = (byte)111;
backingArray[145] = (byte)110;
backingArray[146] = (byte)47;
backingArray[147] = (byte)120;
backingArray[148] = (byte)109;
backingArray[149] = (byte)108;
backingArray[150] = (byte)59;
backingArray[151] = (byte)113;
backingArray[152] = (byte)61;
backingArray[153] = (byte)48;
backingArray[154] = (byte)46;
backingArray[155] = (byte)56;
backingArray[156] = (byte)44;
backingArray[157] = (byte)42;
backingArray[158] = (byte)47;
backingArray[159] = (byte)42;
backingArray[160] = (byte)59;
backingArray[161] = (byte)113;
backingArray[162] = (byte)61;
backingArray[163] = (byte)48;
backingArray[164] = (byte)46;
backingArray[165] = (byte)55;
backingArray[166] = (byte)13;
backingArray[167] = (byte)10;
backingArray[168] = (byte)67;
backingArray[169] = (byte)111;
backingArray[170] = (byte)110;
backingArray[171] = (byte)110;
backingArray[172] = (byte)101;
backingArray[173] = (byte)99;
backingArray[174] = (byte)116;
backingArray[175] = (byte)105;
backingArray[176] = (byte)111;
backingArray[177] = (byte)110;
backingArray[178] = (byte)58;
backingArray[179] = (byte)32;
backingArray[180] = (byte)107;
backingArray[181] = (byte)101;
backingArray[182] = (byte)101;
backingArray[183] = (byte)112;
backingArray[184] = (byte)45;
backingArray[185] = (byte)97;
backingArray[186] = (byte)108;
backingArray[187] = (byte)105;
backingArray[188] = (byte)118;
backingArray[189] = (byte)101;
backingArray[190] = (byte)13;
backingArray[191] = (byte)10;
backingArray[192] = (byte)13;
backingArray[193] = (byte)10;
var lineIndex = SpanIndexOf(backingArray);
Console.WriteLine("Line Index Was {0}", lineIndex);
byte ByteLF = (byte)'\n';
for (int i = 0; i < lineIndex; i++)
{
if (backingArray[i] == ByteLF)
{
var error = String.Format("Missed index {0} as ByteLF", i);
Console.WriteLine(error);
throw new Exception(error);
}
}
}
public static void Main(string[] args)
{
AssertOnBytes();
}
}
}
akyte@Alexanders-MacBook-Pro-3 ~/Projects/SpanCrash/SpanCrash/bin/Debug (master*) $ MONO_VERBOSE_METHOD="ConstStrLen" MONO_EXECUTABLE="/Users/akyte/mono_llvm_opt/mono/mini/mono-sgen --" MONO_PATH=/Users/akyte/mono_llvm_opt/mcs/class/lib/net_4_x /Users/akyte/mono_llvm_opt/runtime/mono-wrapper --aot-path=/Users/akyte/mono_llvm_opt/mcs/class/lib/net_4_x --llvm SpanCrash.exe
Line Index Was 193
Missed index 24 as ByteLF
Unhandled Exception:
System.Exception: Missed index 24 as ByteLF
at SpanCrash.MainClass.AssertOnBytes () <0x10cbd91b0 + 0x002c6> in <168c4942b9ea45bc92c443f7f42ea333#facb7fe7d5c286f3d9cdfe9bf24e6b86>:0
at SpanCrash.MainClass.Main (System.String[] args) <0x10cbd9480 + 0x00018> in <168c4942b9ea45bc92c443f7f42ea333#facb7fe7d5c286f3d9cdfe9bf24e6b86>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.Exception: Missed index 24 as ByteLF
at SpanCrash.MainClass.AssertOnBytes () <0x10cbd91b0 + 0x002c6> in <168c4942b9ea45bc92c443f7f42ea333#facb7fe7d5c286f3d9cdfe9bf24e6b86>:0
at SpanCrash.MainClass.Main (System.String[] args) <0x10cbd9480 + 0x00018> in <168c4942b9ea45bc92c443f7f42ea333#facb7fe7d5c286f3d9cdfe9bf24e6b86>:0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment